a
    ^ΌhM                     @   s<  d dl 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mZ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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# G dd deej$Z%G dd deej$Z&G dd deej$Z'G dd deej$Z(dS )    defaultdict)JRPUser)ProjectProjectMemberProjectModuleProjectTask)ProjectMemberSerializerProjectModuleSerializerProjectSerializerProjectTaskRetriveSerializerProjectTaskSerializer)ListAndSerializerMixin)viewsetspermissions)IsAuthenticated)action)Response)openapi)swagger_auto_schema)MultiPartParser
FormParserstatus)Countc                   @   s`   e Zd ZeZeeeedZeZej	 
dZegZdd Zdd Zeddgd	d
dd ZdS )ProjectViewSetupdateretrievezget item by id createlist-created_atc                 C   s   |j | jjjd dS z= Set the created_by user when creating a new DepartmentType. )
created_byNsaverequestuseridself
serializer r+   @E:\Server_2_sachin\app\JRP\backend_erp\prj_mgt\views\projects.pyperform_create"   s    zProjectViewSet.perform_createc                 C   s   |j | jjjd dS z9 Set the updated_by user when updating a DepartmentType. )
updated_byNr#   r(   r+   r+   r,   perform_update&   s    zProjectViewSet.perform_updateFGETDDL Listdetailmethodsnamec                 O   s2   t j }| j|ddd}dd |jD }t|S )NT	read_onlymanyc                 S   s   g | ]}|d  |d dqS )r'   project_namer'   r6   r+   .0itemr+   r+   r,   
<listcomp>3       z&ProjectViewSet.ddl.<locals>.<listcomp>)r   objectsalldefault_serializer_classdatar   )r)   r%   argskwargs	data_listdata_list_serializrfiltered_datar+   r+   r,   ddl*   s    
zProjectViewSet.ddlN)__name__
__module____qualname__r   serializer_classserializer_classesrC   r   rA   rB   order_byquerysetr   permission_classesr-   r0   r   rJ   r+   r+   r+   r,   r      s   r   c                   @   s   e Zd ZeZeeeedZeZej	 
dZegZdd Zdd Zeddgd	d
eejdejdejdgddd Zeejdejdejdgddd ZdS )ProjectMembersViewSetr   r    c                 C   s   |j | jjjd dS r!   r#   r(   r+   r+   r,   r-   E   s    z$ProjectMembersViewSet.perform_createc                 C   s   |j | jjjd dS r.   r#   r(   r+   r+   r,   r0   I   s    z$ProjectMembersViewSet.perform_updateFr1   r2   r3   
project_idproject_id Query Paramdescriptiontypemanual_parametersc                 O   sB   |j dd }td| tjj|dd}dd |D }t|S )NrT   rT   memberc                 S   sH   g | ]@}|j j|j jr8|j jd  |j j d |j d n|j jdqS ) z ()r;   )r\   r'   
first_name	last_nameroleemailr<   r+   r+   r,   r?   d   s   0z-ProjectMembersViewSet.ddl.<locals>.<listcomp>)query_paramsgetprintr   rA   filterselect_relatedr   r)   r%   rE   rF   rT   rG   rI   r+   r+   r,   rJ   M   s    
zProjectMembersViewSet.ddlc                 O   s   |j dd }tjj|ddd}td| g }|D ]\}td| ||j|j	|j
|j|jj|jjd|jj|jjd |jj |jjdd	 q6t|S )
NrT   r[   projectr\   rG   r;   r]   )r'   r6   rb   )Z	member_idra   	joined_at	is_activeri   r&   )rc   rd   r   rA   rf   rg   re   appendr'   ra   rj   rk   ri   r:   r\   r_   r`   rb   r   )r)   r%   rE   rF   rT   membersZmember_listr\   r+   r+   r,   r   m   s(    


zProjectMembersViewSet.listN)rK   rL   rM   r	   rN   rO   rC   r   rA   rB   rP   rQ   r   rR   r-   r0   r   r   r   	ParameterIN_QUERYTYPE_INTEGERrJ   r   r+   r+   r+   r,   rS   6   s@   rS   c                   @   s   e Zd ZeZeeeedZeZej	 
dZegZdd Zdd Zeddgd	d
eejdejdejdgddd Zeejdejdejdgddd ZdS )ProjectModuleViewSetr   r    c                 C   s   |j | jjjd dS r!   r#   r(   r+   r+   r,   r-      s    z#ProjectModuleViewSet.perform_createc                 C   s   |j | jjjd dS r.   r#   r(   r+   r+   r,   r0      s    z#ProjectModuleViewSet.perform_updateFr1   r2   r3   rT   rU   rV   rY   c                 O   s<   |j dd }td| tjj|d}dd |D }t|S )NrT   r[   c                 S   s   g | ]}|j |jd qS r;   r'   titler<   r+   r+   r,   r?      s   z,ProjectModuleViewSet.ddl.<locals>.<listcomp>)rc   rd   re   r   rA   rf   r   rh   r+   r+   r,   rJ      s    
zProjectModuleViewSet.ddlc                 O   s   |j dd }|r(tjj|dd}ntj d}td| g }|D ]2}||j	|j
|j|j|jj	|jj|jjd qJt|S )NrT   r[   ri   rG   )	module_idZmodule_titleZmodule_descriptionactiverT   r:   Zproject_description)rc   rd   r   rA   rf   rg   rB   re   rl   r'   rt   rW   rv   ri   r:   r   )r)   r%   rE   rF   rT   rG   Zmodule_datamoduler+   r+   r,   r      s"    

zProjectModuleViewSet.listN)rK   rL   rM   r
   rN   rO   rC   r   rA   rB   rP   rQ   r   rR   r-   r0   r   r   r   rn   ro   rp   rJ   r   r+   r+   r+   r,   rq      s@   rq   c                
   @   s  e Zd ZeZeeeedZeZej	 
dZegZeejdejejdddgddd	 Zd
d Zeddgddeejdejdejdgddd Zeejdejdejdgddd Zdd Zeddgddeejdejdejdgddd Zeddgddeejdejdejdgddd Zdd lmZ eddgd!deejd"ejd#ejdejd$ejd%ejdejd&ejd'ejdgdd(d) Z d*S )+ProjectTasksViewSetr   r    attachmentszMultiple filesF)rX   rW   requiredrY   c                 C   s   |j | jjjd dS r!   r#   r(   r+   r+   r,   r-     s    z"ProjectTasksViewSet.perform_createc                 C   s   |j | jjjd dS r.   r#   r(   r+   r+   r,   r0     s    z"ProjectTasksViewSet.perform_updater1   r2   r3   ru   zmodule_id Query ParamrV   c                 O   s<   |j dd }td| tjj|d}dd |D }t|S )Nru   rT   ru   c                 S   s   g | ]}|j |jd qS rr   rs   r<   r+   r+   r,   r?   .  s   z+ProjectTasksViewSet.ddl.<locals>.<listcomp>)rc   rd   re   r   rA   rf   r   )r)   r%   rE   rF   ru   rG   rI   r+   r+   r,   rJ     s    
zProjectTasksViewSet.ddlc                 O   s\   |j dd }td| |r2tjj|dd}ntj d}| j|ddd}t	|j
S )Nru   rT   r{   rw   Tr7   )rc   rd   re   r   rA   rf   rg   rB   rC   r   rD   )r)   r%   rE   rF   ru   rG   rH   r+   r+   r,   r   8  s    
zProjectTasksViewSet.listc                 O   sZ   |   }| |}|j}dd |j D |d< t|j dd |j D |d< t|S )Nc                 S   s   g | ]
}|j qS r+   )r'   )r=   r&   r+   r+   r,   r?   [  r@   z0ProjectTasksViewSet.retrieve.<locals>.<listcomp>Zassigned_member_idsc                 S   s   g | ]}|j jqS r+   )fileurl)r=   
attachmentr+   r+   r,   r?   ]  r@   Zattachment_files)
get_objectget_serializerrD   assigned_membersrB   re   ry   r   )r)   r%   rE   rF   taskr*   rD   r+   r+   r,   r   U  s    

zProjectTasksViewSet.retrieveuser_idzuser_id Query Paramc                 C   s   z|j dd }W n$ tjy6   tddidd Y S 0 tjj|dd}g }|D ]8}t	|}|
|jjj|jjj|jjd|jigd	 qTt|S )
Nr   r4   zUser not found.  r   )r   module__project	task_datarT   r:   module_nametasks)rc   rd   r   DoesNotExistr   r   rA   rf   rg   r   rl   rw   ri   r'   r:   rt   rD   )r)   r%   r   r   project_data	tasks_objr   r+   r+   r,   get_task_list_by_user`  s*    
z)ProjectTasksViewSet.get_task_list_by_userrT   c                 C   s   z|j dd }W n$ tjy6   tddidd Y S 0 tjj|dd}g }|D ]8}t	|}|
|jjj|jjj|jjd|jigd	 qTt|S )
NrT   r4   zproject_id not found.r   r   )Zmodule__project__idr   r   r   )rc   rd   r   r   r   r   rA   rf   rg   r   rl   rw   ri   r'   r:   rt   rD   )r)   r%   rT   r   r   r   r   r+   r+   r,   get_task_list_by_project  s*    
z,ProjectTasksViewSet.get_task_list_by_projectr   r   zproject_task_report Listr   zstatus Query Param	filter_byz9filter_by Query Param (project,user,targer_date,priority)filter_valuezfilter_value Query Paramc                 O   sp  |j d}|j d}|j d}t| |dvrFtdditjdS tj }|dkrf|j	d	d}n|d
krz|j
d	d}|dkr|r|j
|d}d}nL|dkr|r|j
|d}d}n.|dkrd}n |dkrd}ntdditjdS tt}	|ddD ]X}
|
j D ]H}|	|j |
jjj|
jj|
j|
j|
j|
jrF|
jdnd d q
qdd |	 D }t|S )Nr   r   r   )In Progress	CompletederrorzInvalid statusr   r   doner   ri   )Z%module__project__project_name__iexactZmodule__project__project_namer&   )Z$assigned_members__first_name__iexactZassigned_members__emailtarget_dateend_datepriorityzInvalid or missing group_byr   r   z%d-%m-%Y)ri   rw   rt   rW   r   r   c                 S   s   g | ]\}}||d qS ))r6   r   r+   )r=   r6   Z	task_listr+   r+   r,   r?     r@   z;ProjectTasksViewSet.project_task_report.<locals>.<listcomp>)rc   rd   re   r   r   HTTP_400_BAD_REQUESTr   rA   rB   excluderf   r   r   rg   prefetch_relatedr   r_   rl   rw   ri   r:   rt   rW   r   r   strftimeitemsvalues)r)   r%   rE   rF   Zstatus_filtergroup_byr   rQ   Zgroup_fieldZgroupedr   r\   Zresponse_dataZreport_datar+   r+   r,   project_task_report  sJ    


 z'ProjectTasksViewSet.project_task_reportN)!rK   rL   rM   r   rN   rO   rC   r   rA   rB   rP   rQ   r   rR   r   r   rn   IN_FORM	TYPE_FILEr-   r0   r   ro   rp   rJ   r   r   r   r   collectionsr   TYPE_STRINGr   r+   r+   r+   r,   rx      s   


!!rx   N))r   r   hrms.models.userr   Zprj_mgt.models.projectsr   r   r   r   Zprj_mgt.serializers.projectsr	   r
   r   r   r   hrms.views._views_mixinsr   rest_frameworkr   r   Zrest_framework.permissionsr   rest_framework.decoratorsr   rest_framework.responser   drf_yasgr   Zdrf_yasg.utilsr   Zrest_framework.parsersr   r   r   django.db.modelsr   ModelViewSetr   rS   rq   rx   r+   r+   r+   r,   <module>   s&   #b^