
    hRi                         d dl mZmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 g dZdedefd	ZddZd Zd
ddZddZd Zy)    )CountQ)TRANSFER_STATUS)User)Call)ProfileServices))2   z#e76f51)   z#f4a261)r   z#76c487valuereturnc                     | ddS )Nz.2f% )r   s    W/var/www/html/dp2/backend_v2.1/server/apps/calls/services/user_performance_analytics.pypercentr      s    C[?    Fc           	         g }| D ]  }|j                  |d         }|s|d   }|d   }|d   }|rt        ||z  dz  d      nd}	t        d   d   }
t        D ]  \  }}|	|k\  s|}
 n t        j                  |	      }|j
                  |||||	|
d
}|r|j                  |       |dkD  s|j                  |        t        |t              S )zE
    Output format for:
    - user-performance (dashboard cards)
    transfer_usertotal_callscalls_missedcalls_attendedd      r   user)user_idusernamer   successful_callsmissed_callsmissed_percentagebackground_colorkey)	getround!USER_PERFORMANCE_COLOR_THRESHOLDSr   resolve_display_nameidappendsorteduser_performance_sort_key)statsusersshow_allresultsrowr   totalmissedattendedr!   r"   	thresholdcolor	full_nameentrys                  r   format_user_performancer9      s     Gyy_-.M"^$'(@EE6E>S"8!<1<R@C AIu I-#(  !B
 $88dC	 ww!  ("!2 0
 NN5!qyu%C F '899r   c                     | d    | d    fS )Nr!   r   r   )r1   s    r   r,   r,   =   s#    	 	!!	]	 r   )r/   c          
         g }| D ]  }|j                  |d         }|s|d   }|d   }|d   }	|rt        ||z  dz  d      nd}
|rt        |	|z  dz  d      nd}t        j                  |      }||	||
|t	        |      t	        |
      |d	}|r|j                  |       |dkD  s|j                  |        t        |fd
      S )zU
    Output format for:
    - best-performing-users
    - worst-performing-users
    r   r   r   r   r   r   r   r   )r   r   r   avg_attended_valueavg_missed_valueaverage_missedavg_attendedr   c                     |     | d    fS )Nr   r   )xorder_bys    r   <lambda>z#format_best_worst.<locals>.<lambda>o   s    x[L}
r   r#   )r%   r&   r   r(   r   r*   r+   )r-   r.   rB   r/   r0   r1   r   r2   r4   r3   r?   
avg_missedr7   r8   s     `           r   format_best_worstrE   C   s     Gyy_-.M"'(^$=Buh.#5q99>UFUNc115A
#88dC	 ""&". *%j1#L1 
 NN5!qyu%? B 
 r   c                    t         j                  j                  dddd      j                  d      j	                  d      }| j
                  s+t        | dd      r|j                  | j                  	      }|S | j
                  r|d| }|S y)
zP
    Returns queryset of active users for the current company or superuser.
    FT)is_superuser	is_activeprofile__isnullprofile__phone_number__isnull )profile__phone_numberprofileactive_companyN)	companies)r   objectsfilterexcludeselect_relatedrG   getattrrN   )r   superuser_limitr.   s      r   get_company_usersrV   u   s     LL&+	   
 gBg'y(A 
 /?!Ft':':; L 
		&' L r   c           
         | j                  dd      j                         }t        j                  j	                  ||      j                  d      j                  t        d      t        dt        t        j                  j                              t        dt        t        j                  j                                    }|D ci c]  }|d   |
 }}g }|j                  d	      D ]>  }|j                  |j                  |j                  d
d
d
d      }|j!                  |       @ |D ci c]  }|j                  | }	}||	fS c c}w c c}w )Nr)   T)flat)id__intransfer_user__inr   )transfer_status)rQ   )r   r   r   rM   r   )r   r   r   r   )values_listdistinctr   rP   rQ   valuesannotater   r   r   
SUCCESSFULr   FAILEDrS   r%   r)   r*   )
calls_qscompany_userscall_ids	raw_statsr1   	stats_mapfinal_statsr   ur.   s
             r   aggregate_user_callsri      sP   	T	%	  		x=	A		 	d )C)C)I)IJ )?)?)E)EF 
 


	 & C 	Oc!  
 K,,Y7mmGG!% "# !	
 	3 8 ,,mQTT1WmE,)$ -s   E2EN)F)   )django.db.modelsr   r   apps.calls.constantsr   apps.core.modelsr   apps.calls.modelsr   apps.userprofile.servicesr   r'   floatstrr   r9   r,   rE   rV   ri   r   r   r   <module>rr      sP    % 0 ! " 5% !5 S +:Z ;@ 0d(,r   