B
    îÑb»?  ã            	   @   s  d dl 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
 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 d dlmZ d dlmZ d dlmZ d dl m!Z! G dd„ dej"ej#eƒZ$G dd„ dej"ej%ej#ej&ej'eƒZ(dS )é    N)Úmixins)Ústatus)Úpermissions)Úaction)ÚResponse)Ú	sql_utils)Úserializers)ÚEmployeeListFilter)ÚUtilGenericViewSetÚSimpleViewSet)Ú
Department)ÚEmployee)ÚPosition)ÚArea)ÚResign)Údb_const)Úget_api_company_id)Úcachec               @   s¬   e Zd ZeZeZej ¡ Z	dZ
dZejejejejejejdœZdd„ Zdd„ Zedgd	d
dd„ ƒZedgd	d
dd„ ƒZedgd	d
dd„ ƒZedgd	d
dd„ ƒZdS )ÚSimpleEmployeeViewSet)Úemp_codeÚ
first_nameÚ	last_name)r   )ÚlistÚretrieveÚfilter_by_enable_attÚfilter_by_resign_empÚfilter_by_areaÚfilter_area_privilegec             C   s   | j  | jtj¡S )N)Úserializer_dictÚgetr   r   ÚNoneSerializer)Úself© r"   úAG:\easytimepro\master/mysite/personnel\api\views\view_employee.pyÚget_serializer_class*   s    z*SimpleEmployeeViewSet.get_serializer_classc             C   sÒ   y | j jd }tjj|d| _W n   tj ¡ | _Y nX | j }|jj}|rb| j 	dd¡j|d}|jj
sÎ|jj}|jj}|jj}| ¡ rš|j| ¡ d}| ¡ r¶|j| ¡ d ¡ }| ¡ rÎ|j| ¡ d}|S )	NZoutDoor)Zenable_outdoor_managementÚ
departmentÚposition)Ú
company_id)Údepartment__in)Úarea__in)Úposition__in)ÚrequestZGETr   ÚobjectsÚfilterÚquerysetÚallÚuserÚcurrent_companyÚselect_relatedÚis_superuserÚget_auth_areaÚget_auth_deptÚget_auth_posÚexistsÚdistinct)r!   Zmyparamr+   Zuser_current_companyÚqsÚ	auth_areaÚ	auth_deptÚauth_posr"   r"   r#   Úget_queryset.   s.    z"SimpleEmployeeViewSet.get_querysetr   F)ÚmethodsÚdetailc             O   sÜ   ddl m} ddlm}m} | |jj¡ t| 	|jj¡ 	d¡ƒ}|dkrf|  
|  ¡ j|jjd¡}n2|  
|  ¡ ¡j||f|jjdjtj ¡  ¡ d}|  |¡}	|	d k	rÄ| j|	d	d
}
|  |
j¡S | j|d	d
}
t|
jƒS )Nr   )Ú
C_ATT_RULE)ÚSTATUS_VALIDÚSTATUS_RESIGN_PENDINGÚ
resign_empÚ1)r'   )Z
status__inr'   )Z&resign__report_generation_end_date__ltT)Úmany)Zmysite.att.global_cacher@   Zmysite.admin.modelsrA   rB   Zaction_initr0   r1   Ústrr   Úfilter_querysetr=   r-   ZexcludeÚdatetimeZnowÚdateÚpaginate_querysetÚget_serializerÚget_paginated_responseÚdatar   )r!   r+   ÚargsÚkwargsr@   rA   rB   rC   r.   ÚpageÚ
serializerr"   r"   r#   r   G   s"    
z*SimpleEmployeeViewSet.filter_by_resign_empc             O   sj   |   |  ¡ j|jjd¡jdd ¡ }|  |¡}|d k	rR| j|dd}|  |j	¡S | j|dd}t
|j	ƒS )N)r'   é   )Z
enable_attT)rE   )rG   r=   r-   r0   r1   r8   rJ   rK   rL   rM   r   )r!   r+   rN   rO   r.   rP   rQ   r"   r"   r#   r   ]   s    
z*SimpleEmployeeViewSet.filter_by_enable_attc       
      O   s|   |   |  ¡ ¡}|jj}d |¡}t |d¡}|j|d}|  |¡}|d k	rd| j	|dd}	|  
|	j¡S | j	|dd}	t|	jƒS )Nzcurrent_group_area_{0}rR   )Úarea__idT)rE   )rG   r=   r0   r1   Úformatr   r   r-   rJ   rK   rL   rM   r   )
r!   r+   rN   rO   r.   r1   Zcurrent_group_area_keyÚcurrent_arearP   rQ   r"   r"   r#   r   j   s    

z$SimpleEmployeeViewSet.filter_by_areac       
      O   s|   |   |  ¡ ¡}|jj}d |¡}t |d¡}|j|d}|  |¡}|d k	rd| j	|dd}	|  
|	j¡S | j	|dd}	t|	jƒS )Nzcurrent_privilege_area_{0}rR   )rS   T)rE   )rG   r=   r0   r1   rT   r   r   r-   rJ   rK   rL   rM   r   )
r!   r+   rN   rO   r.   r1   Zcurrent_privilege_area_keyrU   rP   rQ   r"   r"   r#   r   {   s    

z+SimpleEmployeeViewSet.filter_area_privilegeN)Ú__name__Ú
__module__Ú__qualname__r   Úmodelr	   Úfilter_classr,   r/   r.   Úsearch_fieldsÚorderingr   ZSimpleEmployeeSerializerZEmployeeFilterSerializerr   r$   r=   r   r   r   r   r   r"   r"   r"   r#   r      s"   

r   c               @   sX  e Zd ZdZeZdZej ¡ Z	e
ZejfZdZdZddddd	d
dddddgZejejejejejejejejejejejejejejdœZdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$e%dgdddd„ ƒZ&e%dgddd d!„ ƒZ'e%dgddd"d#„ ƒZ(e%dgddd$d%„ ƒZ)e%dgddd&d'„ ƒZ*e%dgddd(d)„ ƒZ+e%dgddd*d+„ ƒZ,d,d-„ Z-d.S )/ÚEmployeeViewSetz8
    EmployeeList pagination, search, filter, order
    )r   )r   r   r   )r   r   r   r%   Úidr   r   r   Zcard_noZdepartment_idZposition_idZgenderZemailZdev_privilegeZ
app_status)r   r   ÚcreateÚupdateZpartial_updateÚadjust_areaÚadjust_departÚadjust_positionÚadjust_emp_typeÚadjust_resignÚdel_bio_templateÚ
import_empr   Zexportc             C   s   | j  | jtj¡S )N)r   r   r   r   r    )r!   r"   r"   r#   r$   ²   s    z$EmployeeViewSet.get_serializer_classc             C   s,   | j  dd¡j| jjjd}| dd¡}|S )Nr%   r&   )r'   ÚareaZ	flow_role)r.   r2   r-   r+   r0   r1   Zprefetch_related)r!   r9   r"   r"   r#   r=   ¶   s    zEmployeeViewSet.get_querysetc       
      O   sÊ   |j jsx|j j}|j j}|j j}| ¡ r<| jj| ¡ d| _| ¡ r\| jj| ¡ d 	¡ | _| ¡ rx| jj| ¡ d| _|  
|  ¡ ¡}|  |¡}|d k	r²| j|dd}	|  |	j¡S | j|dd}	t|	jƒS )N)r(   )r)   )r*   T)rE   )r0   r3   r5   r4   r6   r7   r.   r-   r/   r8   rG   r=   rJ   rK   rL   rM   r   )
r!   r+   rN   rO   r;   r:   r<   r.   rP   rQ   r"   r"   r#   r   ½   s(    
zEmployeeViewSet.listc             C   s   |  ¡  d S )N)Úsave)r!   rQ   r"   r"   r#   Úperform_createÕ   s    zEmployeeViewSet.perform_createc          
   O   sR   y"|   ¡ }|  |¡ ddi}t|ƒS  tk
rL } ztd|iƒS d }~X Y nX d S )NÚmessageZdeletedr?   )Z
get_objectZperform_destroyr   Ú	Exception)r!   r+   rN   rO   ÚinstanceZresponseÚer"   r"   r#   Údestroyâ   s    
zEmployeeViewSet.destroyZpostF)r>   r?   c             C   s    | j |jd}|jdd |j}| d¡}| d¡}t|jƒ}xTtjj	|dD ]B}t
jj	|dd }t|jƒ|ksNt|jƒ|kr‚qN||_| ¡  qNW td	d
iƒS )N)rM   T)Úraise_exceptionÚ	employeesr%   )Úid__in)r^   r   r?   zSuccess.)rK   rM   Úis_validÚvalidated_datar   r   r0   r   r,   r-   r   rF   r'   r%   ri   r   )r!   r+   rQ   rt   rq   r%   r'   Úemployeer"   r"   r#   rb   ë   s    


zEmployeeViewSet.adjust_departc             C   s    | j |jd}|jdd |j}| d¡}| d¡}t|jƒ}xTtjj	|dD ]B}t
jj	|dd }t|jƒ|ksNt|jƒ|kr‚qN||_| ¡  qNW td	d
iƒS )N)rM   T)rp   rq   r&   )rr   )r^   r   r?   zSuccess.)rK   rM   rs   rt   r   r   r0   r   r,   r-   r   rF   r'   r&   ri   r   )r!   r+   rQ   rt   rq   r&   r'   ru   r"   r"   r#   rc   û   s    


zEmployeeViewSet.adjust_positionc       
      C   s¸   | j |jd}|jdd |j}| d¡}| d¡}t|jƒ}x6|D ].}tjj	|dd }t
|jƒ|krD| |¡ qDW x4tjj	|dD ]"}	t
|	jƒ|kršq†||	_|	 ¡  q†W td	d
iƒS )N)rM   T)rp   rq   Úareas)r^   r   )rr   r?   zSuccess.)rK   rM   rs   rt   r   r   r0   r   r,   r-   rF   r'   Úremover   rh   ri   r   )
r!   r+   rQ   rt   rq   rv   r'   Zarea_idrh   ru   r"   r"   r#   ra     s     



zEmployeeViewSet.adjust_areac             C   s€   | j |jd}|jdd |j}| d¡}| d¡}t|jƒ}x4tjj	|dD ]"}t
|jƒ|krbqN||_| ¡  qNW tddiƒS )	N)rM   T)rp   rq   Úemp_type)rr   r?   zSuccess.)rK   rM   rs   rt   r   r   r0   r   r,   r-   rF   r'   rx   ri   r   )r!   r+   rQ   rt   rq   rx   r'   ru   r"   r"   r#   rd     s    


zEmployeeViewSet.adjust_emp_typec             C   s¼   | j |jd}|jdd |j}| d¡}| d¡}| d¡}| d¡}| d¡}t|jƒ}	xRtjj	|d	D ]@}
t
|
jƒ|	kr€qltƒ }|
|_||_||_||_||_| ¡  qlW td
diƒS )N)rM   T)rp   rq   Úresign_dateÚresign_typeÚreasonÚ
disableatt)rr   r?   zSuccess.)rK   rM   rs   rt   r   r   r0   r   r,   r-   rF   r'   r   ru   ry   rz   r{   r|   ri   r   )r!   r+   rQ   rt   rq   ry   rz   r{   r|   r'   ru   Zresignr"   r"   r#   re   -  s(    





zEmployeeViewSet.adjust_resignc             C   sä   | j |jd}|jdd |j}| d¡}t|jƒ}g }| d¡rL| d¡ | d¡r`| d¡ | d	¡rt| d
¡ | d¡rˆ| d¡ | d¡rœ| d¡ |rØx6tj	j
|dD ]$}|j|krÀq°| |¡ | |¡ q°W tddiƒS )N)rM   T)rp   rq   Zfinger_printrD   ZfaceÚ2Zfinger_veinÚ6ZpalmÚ8Zvl_faceÚ9)rr   r?   zSuccess.)rK   rM   rs   rt   r   r   r0   Úappendr   r,   r-   r'   Zdelete_emp_devZdelete_db_biodatar   )r!   r+   rQ   rt   rq   r'   Z	bio_typesru   r"   r"   r#   rf   D  s.    













z EmployeeViewSet.del_bio_templatec             C   s@   | j |jd}|jdd |j}| d¡}| d¡}tddiƒS )N)rM   T)rp   Úduplicate_recordÚimport_filer?   zSuccess.)rK   rM   rs   rt   r   r   )r!   r+   rQ   rt   r‚   rƒ   r"   r"   r#   rg   a  s    

zEmployeeViewSet.import_empc             C   sz   |   |  ¡ ¡}|j d¡rby(|j dd¡ d¡}|  ¡ j|d}W n tk
r`   |  |¡}Y nX | j|dd}|j	}|S )NrP   Úid_listÚ ú,)rr   T)rE   )
rG   r=   Zquery_paramsr   Úsplitr-   rl   rJ   rK   rM   )r!   r+   r.   r„   rQ   Zdatasr"   r"   r#   Úget_export_dataj  s    zEmployeeViewSet.get_export_dataN).rV   rW   rX   Ú__doc__r   rY   r\   r,   r/   r.   r	   rZ   r   ZIsAuthenticatedZpermission_classesr[   Zordering_fieldsZexport_headersr   ZEmployeeSerializerZEmployeeCreateSerializerZEmployeeEditSerializerZEmployeeAdjustAreaSerializerZ"EmployeeAdjustDepartmentSerializerZ EmployeeAdjustPositionSerializerZEmployeeAdjustEmptypeSerializerZEmployeeAdjustResignSerializerZ EmployeeDelbiotemplateSerializerZImportSerializerZEmployeeActionSerializerZEmployeeExportSerializerr   r$   r=   r   rj   ro   r   rb   rc   ra   rd   re   rf   rg   rˆ   r"   r"   r"   r#   r]      sL   


		r]   ))rH   Zrest_frameworkr   r   r   Zrest_framework.decoratorsr   Zrest_framework.responser   Úmysiter   Zmysite.personnel.apir   Zmysite.personnel.api.filtersr	   Z mysite.personnel.api.utils_classr
   r   Z(mysite.personnel.models.model_departmentr   Z&mysite.personnel.models.model_employeer   Z&mysite.personnel.models.model_positionr   Z"mysite.personnel.models.model_arear   Z$mysite.personnel.models.model_resignr   Zmysite.personnelr   Zmysite.api.utilsr   Zdjango.core.cacher   ZListModelMixinZRetrieveModelMixinr   ZCreateModelMixinZUpdateModelMixinZDestroyModelMixinr]   r"   r"   r"   r#   Ú<module>   s4   r