o
    mi=                     @   sp  d dl 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mZmZmZmZ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&m'Z' d dl(m)Z) d dl*m+Z+m,Z, G dd deZ-G dd deZ.G dd deZ/G dd deZ0G dd deZ1G dd deZ2G dd deZ3G dd deZ4dS )    )CreateAPIViewListAPIViewRetrieveAPIViewUpdateAPIViewDestroyAPIView)APIView)Responsestatus)SearchFilterOrderingFilter)get_object_or_404)SumOuterRefSubqueryValueDurationFieldF	CharField)Concat)datedatetime)EmployeeCreateAPISerializerEmployeeListAPISerializerEmployeeDetailAPISerializerCurrentActivitySerializerEmployeeUpdateAPISerializerEmployeeAssignProjectSerializerEmployeeDeleteAPISerializer)RoleUser)Project)Activity	TimeSheetc                   @      e Zd ZeZdd ZdS )EmployeeCreateAPIViewc                 C   s   t jjdd}|j|d d S )Nemployee)name)role)r   objectsgetsave)self
serializerZdefault_role r.   G/var/www/html/kuke-dev/django-kuke/apps/employee/views/EmployeeViews.pyperform_create   s   z$EmployeeCreateAPIView.perform_createN)__name__
__module____qualname__r   serializer_classr0   r.   r.   r.   r/   r%          r%   c                   @      e Zd Zdd ZdS )EmployeeAssignProjectAPIViewc                 C   s   z	t jj|d}W n t jy   tdditjd Y S w t|jd}|	 rD|j
dg }tjj|d}|jj|  tdditjdS t|jtjdS )	NidmessagezUser does not existr	   data
project_idZid__inz'Projects has been assigned successfully)r    r)   r*   DoesNotExistr   r
   HTTP_404_NOT_FOUNDr   r<   is_validvalidated_datar!   filterprojectsaddHTTP_201_CREATEDerrorsHTTP_400_BAD_REQUESTr,   requestpkuserr-   r=   rD   r.   r.   r/   post    s   z!EmployeeAssignProjectAPIView.postNr1   r2   r3   rM   r.   r.   r.   r/   r7          r7   c                   @   r6   )EmployeeUnAssignProjectAPIViewc                 C   s^   t t|d}t|jd}|jdd |jdg }tjj	|d}|j
j|  tdditjd	S )
N)rK   r;   T)raise_exceptionr=   r>   r:   z)Projects has been unassigned successfullyr	   )r   r    r   r<   rA   rB   r*   r!   r)   rC   rD   remover   r
   rF   rI   r.   r.   r/   rM   2   s   z#EmployeeUnAssignProjectAPIView.postNrN   r.   r.   r.   r/   rP   1   rO   rP   c                   @   s0   e Zd ZeZeegZg dZg dZ	dd Z
dS )EmployeeListAPIView)	full_namephone_noemail)r9   rT   rU   rV   pay_per_hourtotal_working_durationc                 C   s  | j jdd }| j jdd}| j jdd }| j jd}| j jd}tj   }|dkr<tj   }|r|dkrmt	jj
tdtd	d
djtdddd}|j
|d jt|dd}nJt	jj
tdtdd
djtdddd}|j
|djt|dd}n!t	jj
tdddjtdddd}|jt|dd}|r|j|d}|d ur|j
| dkd}|S )Nr=   include_all_employeesF	is_activeemployee_without_project_idwith_trashedtruerK   activity__project_id)user_idr=   r_   total_duration)rX   rX   )r^   projects__id)ra   )r_   )rZ   )rJ   query_paramsr*   r    r)   allfilter_employeeannotate_full_namer\   r"   rC   r   valuesannotater   distinctr   excludelower)r,   r=   rY   rZ   r[   r\   querysetZactivity_qsr.   r.   r/   get_querysetF   s*   2$2 ,z EmployeeListAPIView.get_querysetN)r1   r2   r3   r   r4   r   r   filter_backendssearch_fieldsordering_fieldsrl   r.   r.   r.   r/   rS   @   s    rS   c                   @   s.   e Zd ZeZej jdd	d
dZdS )EmployeeDetailAPIViewr&   
role__namerD   r(   N)r1   r2   r3   r   r4   r    r)   r\   rC   prefetch_relatedselect_relatedrk   r.   r.   r.   r/   rp   g   s    "rp   c                   @   s$   e Zd ZdgZeZejjddZ	dS )EmployeeEditAPIViewpatchr&   rq   N)
r1   r2   r3   http_method_namesr   r4   r    r)   rC   rk   r.   r.   r.   r/   ru   l   s    ru   c                   @   r$   )EmployeeDeleteAPIViewc                 O   sB   t t|dd}tjj|dj| jjt d | 	|}t
|jS )Nr&   )rK   rr   r8   )
deleted_by
deleted_at)r   r    r)   rC   updaterJ   rL   r   nowr4   r   r<   )r,   rJ   rK   argskwargsr&   r-   r.   r.   r/   deleteu   s    

zEmployeeDeleteAPIView.deleteN)r1   r2   r3   r   r4   r   r.   r.   r.   r/   rx   r   r5   rx   c                   @   s   e Zd ZdddZdS )CurrentActivityAPIViewNc                 C   s   t jj| jjt ddddd }|rt	|j
nd }ztjj|jt d }|r0|jnd }|r7|jnd }W n tjyH   d }d }Y nw t|||dS )Nstarted)rL   start_date_time__dater
   rL   projectactivity_type)rL   clock_in_date_time__date)current_activityclock_in_timeclock_out_time)r"   r)   rC   rJ   rL   r   todayrt   lastr   r<   r#   clock_in_date_timeclock_out_date_timer?   r   )r,   rJ   formatZcurrent_activity_querysetr   Ztimesheet_entryr   r   r.   r.   r/   r*      s   (zCurrentActivityAPIView.get)N)r1   r2   r3   r*   r.   r.   r.   r/   r      s    r   N)5rest_framework.genericsr   r   r   r   r   rest_framework.viewsr   rest_framework.responser   rest_frameworkr
   rest_framework.filtersr   r   django.shortcutsr   django.db.modelsr   r   r   r   r   r   r   django.db.models.functionsr   r   r   Z.apps.employee.serializers.employee_serializersr   r   r   r   r   r   r   Zapps.user.modelsr   r    apps.project.modelsr!   Zapps.employee.modelsr"   r#   r%   r7   rP   rS   rp   ru   rx   r   r.   r.   r.   r/   <module>   s*    $$	'