o
    mi9%                     @   s  d dl 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 d dlmZ d dlmZ d dlmZ 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mZ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- d dl.m/Z/ d dl0m1Z1 G dd deZ2G dd deZ3G dd deZ4G dd deZ5G dd deZ6G dd deZ7G dd deZ8G d d! d!eZ9G 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 )/    )ListAPIViewCreateAPIViewUpdateAPIViewRetrieveAPIViewDestroyAPIView)SearchFilterOrderingFilter)IsAuthenticated)APIView)Responsestatus)datetime)CountOuterRefSubquerySumQ)Coalesce)get_object_or_404)	ProjectListSerializerProjectAddSerializerProjectDetailSerializerProjectVendorSerializer"ProjectAssignEmployeeAPISerializerProjectDeleteAPISerializer!ProjectMinutesOfMeetingSerializerProjectConsultantSerializerProjectContractorSerializer)Project)Vendor)
Consultant)
Contractor)Activity)Userc                   @   s0   e Zd ZeZeegZddgZg dZ	dd Z
dS )ProjectListAPIViewnameclient_name)idr&   r'   total_vendorstotal_working_durationtotal_consultantstotal_contractorsc           
      C   sb  | j jdd }| j jdd }| j jdd }| j jdd }| j jdd }| j jd}| j jd}tjdd	d
d
 }tjj	t
dddjtdddd}	|dkrdtj  }|rv|	j	t
dd}	|j	|d }|r~|j	|d}|r|j	|d}|r|j	|d}|r|j	|d}|r|j|d}|jt|	dd   }|S )Nemployee_id	client_id	vendor_idconsultant_idcontractor_idproject_without_employee_idwith_trashedr(   r&   clientpk)
project_idr6   total_duration)r*   r*   trueZ$project_employees__activity__user_id)user_id)project_employees)r.   )Zvendors__id)Zcontractors__id)Zconsultants__id)Zproject_employees__id)requestquery_paramsgetr   objectsonlyselect_relatedannotate_client_namer#   filterr   valuesannotater   r3   distinctexcluder   annotate_vendors_countannotate_consultants_countannotate_contractors_count)
selfr-   r.   r/   r0   r1   r2   r3   querysetactivity_qs rM   E/var/www/html/kuke-dev/django-kuke/apps/project/views/ProjectViews.pyget_queryset!   s<   ,zProjectListAPIView.get_querysetN)__name__
__module____qualname__r   serializer_classr   r   filter_backendssearch_fieldsordering_fieldsrO   rM   rM   rM   rN   r%      s    r%   c                   @   s   e Zd ZeZegZdS )ProjectCreateAPIViewN)rP   rQ   rR   r   rS   r	   permission_classesrM   rM   rM   rN   rW   L   s    
rW   c                       s6   e Zd ZdgZeZej Z	e
gZ fddZ  ZS )ProjectEditAPIViewpatchc                    s   t   }| jd |d< |S )Nr5   r6   )superget_serializer_contextkwargs)rJ   context	__class__rM   rN   r\   W   s   
z)ProjectEditAPIView.get_serializer_context)rP   rQ   rR   http_method_namesr   rS   r   r>   allrK   r	   rX   r\   __classcell__rM   rM   r_   rN   rY   Q   s    
rY   c                   @   s&   e Zd ZeZegZej	 
dZdS )ProjectDetailAPIViewr4   N)rP   rQ   rR   r   rS   r	   rX   r   r>   r3   r@   rK   rM   rM   rM   rN   rd   ]   s    rd   c                   @   s*   e Zd ZeZegZej	dZ
dd ZdS )$ProjectMinutesOfMeetingUpdateAPIViewminutes_of_meetingc                 O   sP   t | j|d d}| j||jdd}|jdd |jd|_|  t	|jS )Nr5   r5   T)datapartialraise_exceptionrf   )
r   rK   get_serializerrh   is_validvalidated_datar=   rf   saver   )rJ   r;   argsr]   project
serializerrM   rM   rN   updateh   s   
z+ProjectMinutesOfMeetingUpdateAPIView.updateN)rP   rQ   rR   r   rS   r	   rX   r   r>   r?   rK   rs   rM   rM   rM   rN   re   c   s
    re   c                   @   s   e Zd ZeZdd ZdS )ProjectDeleteAPIViewc                 O   s@   t t|d}tjj|dj| jjt d | 	|}t
|jS )Nrg   )r(   )
deleted_by
deleted_at)r   r   r>   rB   rs   r;   userr   nowrS   r   rh   )rJ   r;   r5   rp   r]   rq   rr   rM   rM   rN   deletev   s    

zProjectDeleteAPIView.deleteN)rP   rQ   rR   r   rS   ry   rM   rM   rM   rN   rt   s   s    rt   c                   @      e Zd Zdd ZdS )ProjectAssignVendorAPIViewc                 C   ^   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 )
Nrg   rh   Trj   r/   id__inmessagez&Vendors has been assigned successfullyr   )r   r   r   rh   rm   rn   r=   r    r>   rB   vendorsaddr   r   HTTP_201_CREATEDrJ   r;   r5   rq   rr   r/   r   rM   rM   rN   post      zProjectAssignVendorAPIView.postNrP   rQ   rR   r   rM   rM   rM   rN   r{          r{   c                   @   rz   )ProjectAssignConsultantAPIViewc                 C   r|   )
Nrg   r}   Trj   r0   r~   r   z*consultants has been assigned successfullyr   )r   r   r   rh   rm   rn   r=   r!   r>   rB   consultantsr   r   r   r   rJ   r;   r5   rq   rr   r0   r   rM   rM   rN   r      r   z#ProjectAssignConsultantAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   )ProjectAssignContractorAPIViewc                 C   r|   )
Nrg   r}   Trj   r1   r~   r   z*Contractors has been assigned successfullyr   )r   r   r   rh   rm   rn   r=   r"   r>   rB   contractorsr   r   r   r   rJ   r;   r5   rq   rr   r1   r   rM   rM   rN   r      r   z#ProjectAssignContractorAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   )ProjectUnAssignVendorAPIViewc                 C   r|   )
Nrg   r}   Trj   r/   r~   r   z(Vendors has been unassigned successfullyr   )r   r   r   rh   rm   rn   r=   r    r>   rB   r   remover   r   r   r   rM   rM   rN   r      r   z!ProjectUnAssignVendorAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   ) ProjectUnAssignConsultantAPIViewc                 C   r|   )
Nrg   r}   Trj   r0   r~   r   z,consultants has been unassigned successfullyr   )r   r   r   rh   rm   rn   r=   r!   r>   rB   r   r   r   r   r   r   rM   rM   rN   r      r   z%ProjectUnAssignConsultantAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   ) ProjectUnAssignContractorAPIViewc                 C   r|   )
Nrg   r}   Trj   r1   r~   r   z,contractors has been unassigned successfullyr   )r   r   r   rh   rm   rn   r=   r"   r>   rB   r   r   r   r   r   r   rM   rM   rN   r      r   z%ProjectUnAssignContractorAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   )ProjectAssignEmployeeAPIViewc                 C   r|   )
Nrg   r}   Trj   employee_idsr~   r   z(Employees has been assigned successfullyr   )r   r   r   rh   rm   rn   r=   r$   r>   rB   r:   r   r   r   r   rJ   r;   r5   rq   rr   r   Z	employeesrM   rM   rN   r         z!ProjectAssignEmployeeAPIView.postNr   rM   rM   rM   rN   r      r   r   c                   @   rz   )ProjectUnAssignEmployeeAPIViewc                 C   r|   )
Nrg   r}   Trj   r   r~   r   z*Employees has been unassigned successfullyr   )r   r   r   rh   rm   rn   r=   r$   r>   rB   r:   r   r   r   r   r   rM   rM   rN   r      r   z#ProjectUnAssignEmployeeAPIView.postNr   rM   rM   rM   rN   r      r   r   N)@rest_framework.genericsr   r   r   r   r   rest_framework.filtersr   r   Zrest_framework.permissionsr	   rest_framework.viewsr
   rest_framework.responser   rest_frameworkr   r   django.db.modelsr   r   r   r   r   django.db.models.functionsr   django.shortcutsr   Z,apps.project.serializers.project_serializersr   r   r   r   r   r   r   r   r   apps.project.modelsr   apps.vendor.modelsr    apps.consultant.modelsr!   apps.contractor.modelsr"   Zapps.employee.modelsr#   Zapps.user.modelsr$   r%   rW   rY   rd   re   rt   r{   r   r   r   r   r   r   r   rM   rM   rM   rN   <module>   s>    ,1