
    :/fi+                         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
mZ d dlmZ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 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%  G d dejL                  e      Z'y)    )timezone)viewsetsstatus)action)Response)CoalesceNullIf)QAvgOuterRefSubqueryCountValueIntegerField)DjangoFilterBackend   )CustomerSearchMixin)Customer)CustomerSerializerCustomerHistorySerializer)Call)TRANSFER_STATUSBotType)ProfileServices)OurLimitOffsetPaginationc                       e Zd Zej                  j                         ZeZe	gZ
d Z eddgdee	g      d        Z eddgde      d	        Z ed
dgd      d        Zy)CustomerViewSetc                     | j                   }| j                  j                  }|j                  sF|j                  st
        j                  j                         S |j                  |j                        }|S )Ncompany)	querysetrequestuseris_superuseractive_companyr   objectsnonefilter)selfqsr#   s      =/var/www/html/dp2/backend_v2.1/server/apps/customers/views.pyget_querysetzCustomerViewSet.get_queryset   sd    ]]||    &&'',,..++  B 	    Fgetzcustomer-stats)detailmethodsurl_pathpagination_classfilter_backendsc                    | j                  | j                               }t        j                  j	                  t        d      t        d            j                  d      j                  t        d      t        dt        t        j                  j                              t        dt        t        j                  j                              t        dt        t        j                  j                                    }|j                  d      j                  d	      d d
 }|j                  t!        |      t#        t!        |j                  d      t%                     t'        d            t#        t!        |j                  d      t%                     t'        d            t#        t!        |j                  d      t%                     t'        d            t#        t!        |j                  d      t%                     t'        d            t#        t)        dt'        d            t'        d                  j                  d      }| j+                         }| j-                  |      }|j/                  |||       }|D cg c]k  }|j0                  |j2                  |j4                  |j6                  |j8                  |j:                  |j<                  |j>                  r|j>                  nd dm }}|jA                  |      S c c}w )Nphoner    )from_numberr    id)transfer_status)r(   )total_callsmissed_callsreceived_callsnot_transferred_calls-created_at
created_atr   r9   r   r:   r;   r<   name Unknown)last_call_timer9   r:   r;   r<   customer_namez-last_call_timeview)customer_idrC   phone_numberr9   r:   r;   r<   rB   )!filter_querysetr,   r   r&   r(   r   valuesannotater   r
   r   FAILEDvalue
SUCCESSFULNOT_TRANSFERREDorder_byr   r   r   r   r	   r2   apply_call_searchpaginate_querysetr7   rC   r5   r9   r:   r;   r<   rB   get_paginated_response)	r)   r"   r!   call_stats_subquerylast_call_subquery	paginatorpagecresultss	            r+   customer_statszCustomerViewSet.customer_stats,   s    ''(9(9(;< LL$W- +    VIX!$K"_-C-C-I-IJ  %_-G-G-M-MN  ',_-L-L-R-RS'   	0  Xm$VL!"1& 	 $$#$67 ,33MBLNSa ",33NC\^Ta $,334DE|~Va #+,334KLln]a#
 #vuRy)i ) % 
0 ($
%1 	4 ))+	))(3**8W4*H 
   !tt!" ! }} !"#"2"2)*)@)@()(8(8A$$d  	 
  //88!
s   A0L	zcustomer-history)r/   r0   r1   r2   c                    t        |j                        }|j                  d       |j                  }|d   }|d   }|d   }|j                  }| j
                  }|j                  sE|j                  st        ddit        j                  	      S |j                  |j                  
      }	 |j                  |      }	t        j                   |      r$t        j"                  |t        j$                        }t        j                   |      r$t        j"                  |t        j$                        }t&        j(                  j                  |	j*                  |	j,                  ||      j/                  dd      j1                  d      }
|
j3                  dd      j5                         j1                  d      }t7               }|j9                  t;        |      ||       }i }|
D ]P  }t        j<                  |j>                        jA                         }|jC                  |g       jE                  |       R g }|D ]  }|j                  |g       }|st        j<                  |d   j>                        }g }|D ]  }|jF                  }|r tI        jJ                  ||j,                        nd}|jE                  |jL                  |jN                  |jP                  ||jR                  tU        |jV                  xs d      |j>                  d|jX                  t[        |j\                        j^                  d
        |jE                  ||d        t        |j`                  |jc                         |je                         |	jf                  xs d|	j*                  |
ja                         |d      S # t        j                  $ r  t        ddit        j                  	      cY S w xY w)N)dataT)raise_exceptionrF   
start_dateend_dater/   zNo active company foundr   r   )r7   Customer not found)r6   r    created_at__gtecreated_at__lttransfer_usertransfer_user__profiler=   created_at__date)flatz-created_at__daterD   r   Not Transferredr@   )
r7   twilio_call_id	sentimentadvisor_namesummarydurationtime
transcriptcall_idbot_type_label)datecallsrA   )countnextpreviousrC   customer_phoner9   history)4r   query_paramsis_validvalidated_datar#   r!   r$   r%   r   r   HTTP_404_NOT_FOUNDr(   r.   r   DoesNotExistr   is_naive
make_awareutcr   r&   r5   r    select_relatedrO   values_listdistinctr   rQ   list	localtimer>   rq   
setdefaultappendrc   r   display_name_for_companyr7   twilio_call_sidri   rk   floatrl   ro   r   bot_typelabelrs   get_next_linkget_previous_linkr?   )r)   r"   
serializerr[   rF   start_dtend_dtr#   customer_qscustomercalls_qsdates_qsrU   paginated_datescalls_by_datecall
local_daterw   rq   	day_callsfull_datetimecalls_payloadadvisorrj   s                           r+   customer_historyz CustomerViewSet.customer_history   s    /G4H4HI
D1((=)%j!||mm  &&89!44  &,,T5H5H,IK	"+6H X&**8X\\BHV$((>F<<&& $$$!	 ' 

 .$
 (=
! 	 [+$[7XZX)*	 	 -.	#55N 6 
 D!++DOO<AACJ$$Z4;;DA  #D%))$3I$..y|/F/FGMM!,, 	 $<< %6  $$''&*&:&:!%$0#|| %dmm&8q 9 OO"$#||&-dmm&<&B&B&  "0 NN%& C $L __++-!335%]]7i&nn#>>+
  	_ $$ 	/000 	s   .N0 00O#"O#Tzrecent-calls)r/   r0   r1   c                 (   |j                   }	 | j                         j                  d      j                  |      }|j                  sB|j                  r|j                  |j                  k7  rt        ddit        j                        S t        j                  j                  |j                   |j                        j                  dd      j#                  d	d
dddddddddd      }|j%                  d      j'                  t)        d            d   }t+        |j-                  d      d d       }|r|d   j.                  nd }g }	|D ]  }
|
j0                  }|r t3        j4                  ||
j6                        nd}|	j9                  |
j:                  |
j<                  |
j>                  |j@                  xs d|
j.                  tC        |
jD                  xs d      d|
jF                  |
jH                  |tK        |
jL                        jN                  d        t        |j@                  xs d|j                   |tQ        |d       |jS                         |	d!      S # t        j
                  $ r  t        ddit        j                        cY S w xY w)"Nr    )pkr/   r`   r_   )r6   
company_idrc   rd   r7   ro   r   r>   rl   ri   rk   r   r8   transfer_user__username"transfer_user__profile__first_name!transfer_user__profile__last_nameT)sentiment__isnull)avgr   r=   
   r   rg   rA   r@   )r7   ro   rh   rC   	timestampduration_secondsrn   sentiment_scorerk   rj   rp      )rC   r5   recent_call_datetimeavg_sentimentr9   call_records)*r#   r,   r   r.   r   r|   r   r   r{   r$   r%   r   active_company_idr   r&   r(   r5   onlyexclude	aggregater   r   rO   r>   rc   r   r   r    r   r7   ro   r   r?   r   rl   ri   rk   r   r   r   roundrs   )r)   r"   r   r#   r   r   sentiment_avgrecent_callsr   r   r   r   rj   s                r+   r   zCustomerViewSet.recent_calls   s   ||	((*99)DHHBHOH   &&(*=*=AWAW*W34!44  LLV$NN#..  
 ^( T!!)43 	8 !((" ) 

)K   

	 m,Sb1
 >J|A99t D((G 	  88LL !2  gg<<"&"6"6!)!;)!__$)$--*<1$= #'>><< ,")$--"8">">!  !2 %]]7i^^$8"=!4#>>+(
  	_ $$ 	/000 	s   /I 0JJN)__name__
__module____qualname__r   r&   allr!   r   serializer_classr   r3   r,   r   r   rY   r   r    r-   r+   r   r      s    ##%H)*+O !1,-P9P9d #1	mm^ 4%>B[ C[r-   r   N)(django.utilsr   rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.responser   django.db.models.functionsr   r	   django.db.modelsr
   r   r   r   r   r   r   django_filters.rest_frameworkr   mixinsr   modelsr   serializersr   r   apps.calls.modelsr   apps.calls.constantsr   r   apps.userprofile.servicesr   utils.paginationsr   ModelViewSetr   r   r-   r+   <module>r      sT    ! + , , 7   > '  F " 9 5 6|h++-@ |r-   