
    [i                         d dl Z d dlmZmZ d dlmZ d dlmZmZmZm	Z	 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 d d
lmZmZ d dlZ ej2                  e      Z G d d      Zy)    N)datetime	timedelta)relativedelta)CountQAvgSum)ExtractRound)timezone)action)Responsestatus)TRANSFER_STATUSBotTypec                   @    e Zd ZdZ eddgd      d        Zd Zd Zy	)
MonthlyStatsMixinz@
    Provides monthly call statistics for the current year.
    Fgetzmonthly-stats)detailmethodsurl_pathc                 @   | j                  | j                               }|j                  }| j                  |      }t	        j
                         j                  |      }|j                  d      t        d      z
  j                  dddd      }|j                  |      j                  t        dd	|
      t        dd|
            j                  d	d      j                  t        d      t        dt        t        j                               t        dt        t        j"                              t        dt        t$        j&                  j(                              t        dt        t$        j*                  j(                              t        dt        t$        j,                  j(                              t/        t1        d            t3        d            j5                  d	d      }t7        | j9                  ||      t:        j<                        S )N   )day   monthsr   )hourminutesecondmicrosecond)created_at__gte
created_atyear)tzinfomonth)r%   r'   id)bot_type)filter)transfer_statusduration)total_callstotal_service_callstotal_sales_callsnot_transferred_callsreceived_callsmissed_callsavg_call_timetot_call_timer   )filter_querysetget_querysetuser_get_company_timezoner   now
astimezonereplacer   r*   annotater
   valuesr   r   r   SERVICE_BOT	SALES_BOTr   NOT_TRANSFERREDvalue
SUCCESSFULFAILEDr   r   r	   order_byr   _format_monthly_responser   HTTP_200_OK)selfrequestqsr7   
company_tzr9   
start_datemonthly_aggs           H/var/www/html/dp2/backend_v2.1/server/apps/calls/mixins/monthly_stats.pymonthly_statszMonthlyStatsMixin.monthly_stats   s   !!$"3"3"56||//5
lln''
3 KKAK2&'
'q1!'
< 	 IIjI1X\6*ElGJG   VFG$X!$K$)G,?,?!@% #(G,=,=!># ',?3R3R3X3X!Y'  %?3M3M3S3S!T  #?3I3I3O3O!P $C
O4!*o%  ( Xfg&7 	< ))+zB%%
 	
    c                 B   t        |dd       rAt        |j                  dd       r*	 t        j                  |j                  j                        S t        j                         S # t        $ r2}t
        j                  |       Y d }~t        j                         S d }~ww xY w)Nactive_companyr   )getattrrQ   pytzr   	Exceptionloggerwarningget_default_timezone)rG   r7   excs      rM   r8   z'MonthlyStatsMixin._get_company_timezoneI   s    4)40WT=P=PR\^b5c}}T%8%8%A%ABB ,,..  s#,,..s   (A# #	B,BBc                    ddddddddd	d
ddd}g }|D ]  }t        |d         }t        |d         }t        j                  t        ||d      |      }|t	        d      z   t        d      z
  }	|j                  |j                  |      |||	|d   xs d|d   xs d|d   xs d|d   xs d|d   xs d|d   xs d|d   xs d|d   xs dd        |S )NJanuaryFebruaryMarchAprilMayJuneJulyAugust	SeptemberOctoberNovemberDecember)r                        	   
   r      r%   r'   r   r   )microsecondsr-   r   r.   r/   r0   r2   r1   r3   r4   )r'   r%   rK   end_date	tot_callsr.   r/   r0   r2   r1   r3   r4   )intr   
make_awarer   r   r   appendr   )
rG   rowstzmonth_namesresultrowr%   r'   startends
             rM   rE   z*MonthlyStatsMixin._format_monthly_responseR   s   ZGFx	zz
 Cs6{#DG%E''ua(@"EE-q11I14MMCMM$/# /41'*+@'A'FQ%()<%=%B),-D)E)J #N 3 8q"%&6"7"<1!$_!5!:!$_!5!:  , rO   N)__name__
__module____qualname____doc__r   rN   r8   rE    rO   rM   r   r      s2     55'OD.
 E.
`/rO   r   )rS   r   r   dateutil.relativedeltar   django.db.modelsr   r   r   r	   django.db.models.functionsr
   r   django.utilsr   rest_framework.decoratorsr   rest_framework.responser   rest_frameworkr   apps.calls.constantsr   r   logging	getLoggerr}   rU   r   r   rO   rM   <module>r      sI     ( 0 / / 5 ! , , ! 9  
		8	$^ ^rO   