o
    mi:                     @   sL  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 d d	lmZ d d
lmZ d dlmZmZmZ d dlmZmZmZmZmZm Z  d dl!m"Z"m#Z# d dl$m%Z% d dl&Z&G dd deZ'G dd deZ(G dd deZ)G dd deZ*G dd deZ+G dd deZ,G dd deZ-dS )    )APIView)ListAPIView)Response)SearchFilterOrderingFilter)Project)ActivityTypeActivity)Vendor)User)
Consultant)
Contractor)ActivityTypeSerializerProjectSerializerUserSerializer)SumCountOuterRefSubqueryQF)date	timedeltatimedelta_to_custom_formatNc                   @      e Zd Zdd ZdS )SpentHoursDashboardAPIViewc           
      O   s   |j dt j}|j dt j}tt|t|dd}|	d}t
jj||djtddjdd}t|dd	}	t|	jS )
Nmonthyear   )activity__start_date_time__gteactivity__end_date_time__lteactivity__total_duration)total_hoursT)Ztotal_hours__isnullmany)query_paramsgetpendulumnowr   r   datetimeintstart_ofend_ofr   objectsfilterannotater   excluder   r   data)
selfrequestargskwargsr   r   
start_dateend_dateZproject_hours
serializer r:   I/var/www/html/kuke-dev/django-kuke/apps/user/views/AdminDashboardViews.pyr'      s   

zSpentHoursDashboardAPIView.getN__name__
__module____qualname__r'   r:   r:   r:   r;   r          r   c                   @   r   )$MostUsedActivityTypeDashboardAPIViewc           
      O   s   |j dt j}|j dt j}tt|t|dd}|	d}t
jjd||djtddjddjd	dd
}t|dd}	t|	jS )Nr   r   r   T)	is_activer    r!   activity)Zactivity_count)Zactivity_count__isnullr   z-activity_countr$   )r&   r'   r(   r)   r   r   r*   r+   r,   r-   r   r.   r/   r0   r   r1   order_byr   r   r2   )
r3   r4   r5   r6   r   r   r7   r8   Zmost_used_activity_typesr9   r:   r:   r;   r'   /   s&   

z(MostUsedActivityTypeDashboardAPIView.getNr<   r:   r:   r:   r;   rA   -   r@   rA   c                   @   r   )$YesterdayActiveUsersDashboardAPIViewc           	      O   s  t  tdd }| jjd}tjjt	d|d
djtdd
dd	}tjjd
d 
d jt|
d	djdddjtdd}|dkrutj jd
d 
d jt|
d	djdddjtdd}dd t|D }t|S )Nr   )dayswith_trashedpk)user_idstart_date_time__daterI   total_durationtotal_working_durationrM   TrB   idF)Ztotal_working_duration__isnullz-total_working_duration
deleted_at)rP   truec                 S   s$   g | ]}i |d t |d  iqS rL   r   ).0itemr:   r:   r;   
<listcomp>Z   s    z<YesterdayActiveUsersDashboardAPIView.get.<locals>.<listcomp>)r   todayr   r4   r&   r'   r	   r.   r/   r   valuesr0   r   r   filter_employeeannotate_full_namer   rD   r   rG   listr   )	r3   r4   r5   r6   	yesterdayrG   activity_qsZactive_users_querysetZactive_users_listr:   r:   r;   r'   D   s:   z(YesterdayActiveUsersDashboardAPIView.getNr<   r:   r:   r:   r;   rE   B   r@   rE   c                   @   r   )DashboardTotalsAPIViewc           
      O   sf   t jjdd  }tj }tjjdd }tj }tj }t	j }	t
||||||	dS )NTrN   )total_employeestotal_projectstotal_activity_typestotal_vendorstotal_consultantstotal_contractor)r   r.   r/   rW   countr   r   r
   r   r   r   )
r3   r4   r5   r6   r]   r^   r_   r`   ra   rb   r:   r:   r;   r'   d   s   



zDashboardTotalsAPIView.getNr<   r:   r:   r:   r;   r\   b   r@   r\   c                   @   r   )TopEmployeesMaxHoursAPIViewc           
      O   s   |j dt j}|j dt j}tt|t|dd}|	d}t
jj||dddddjtddd	jdd
jdd d d }t|||ddd}	t|	jS )Nr   r   r   employeeT)$activity__start_date_time__date__gte$activity__start_date_time__date__lte
role__namerB   Zactivity__deleted_at__isnullZactivity__deleted_by_id__isnullr"   rK   z-total_durationZtotal_duration__isnull00:00:00   r7   r8   )contextr%   )r&   r'   r(   r)   r   r   r*   r+   r,   r-   r   r.   r/   r0   r   rD   r1   distinctr   r   r2   )
r3   r4   r5   r6   r   r   r7   r8   Ztop_employees_max_hoursr9   r:   r:   r;   r'   x   s(   



zTopEmployeesMaxHoursAPIView.getNr<   r:   r:   r:   r;   rd   v   r@   rd   c                   @   r   )TopEmployeesMinHoursAPIViewc           
      O   s   |j dt j}|j dt j}tt|t|dd}|	d}t
jj||dddjtddjdd	jd
d dd d }t|d||dd}	t|	jS )Nr   r   r   re   Trf   rg   rh   rB   r"   ri   rj   rk   rK   rl   rm   )r%   rn   )r&   r'   r(   r)   r   r   r*   r+   r,   r-   r   r.   r/   r0   r   r1   ro   rD   r   r   r2   )
r3   r4   r5   r6   r   r   r7   r8   Ztop_employees_min_hoursr9   r:   r:   r;   r'      s(   

zTopEmployeesMinHoursAPIView.getNr<   r:   r:   r:   r;   rp      r@   rp   c                   @   s0   e Zd ZeZeegZddgZg dZ	dd Z
dS )EmployeesHoursAPIView	full_namerO   )rO   rs   rK   c                 C   s   | j jdt j}| j jdt j}tt|t|d	d}|
d}tjj||ddd jtddjdd	jd
d }|S )Nr   r   r   re   Trq   r"   ri   rj   rk   )r4   r&   r'   r(   r)   r   r   r*   r+   r,   r-   r   r.   r/   rX   r0   r   r1   ro   )r3   r   r   r7   r8   querysetr:   r:   r;   get_queryset   s&   
z"EmployeesHoursAPIView.get_querysetN)r=   r>   r?   r   serializer_classr   r   filter_backendssearch_fieldsordering_fieldsru   r:   r:   r:   r;   rr      s    rr   ).rest_framework.viewsr   rest_framework.genericsr   rest_framework.responser   rest_framework.filtersr   r   apps.project.modelsr   Zapps.employee.modelsr   r	   apps.vendor.modelsr
   Zapps.user.modelsr   apps.consultant.modelsr   apps.contractor.modelsr   Z%apps.user.serializers.admin_dashboardr   r   r   django.db.modelsr   r   r   r   r   r   r*   r   r   core.utils.helperr   r(   r   rA   rE   r\   rd   rp   rr   r:   r:   r:   r;   <module>   s,      