B
    'b1                 @   s   d dl Z d dlZd dlZd dlmZ d dlZd dl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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  G dd dej!Z"G dd dej#eZ$dS )    N)OrderedDict)gettext_lazyactivate)mixinsserializers)APIException)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)Response)Q)CHOICE_GENDER)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc               @   s   e Zd ZejedddZejeddddZejedd	ddZejed
dddZ	ej
eddZejeddddZejeddddZejeddddZejeddddZejedddZejddZdd ZG dd dZdS )AbnormalReportSerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r   r   
allow_nullZreport_column_lastNameemp__last_nameZemp_field_localizedNameemp__nicknameZreport_column_gender)r   Zreport_column_departmentCodeemp__department__dept_codeZreport_column_departmentNameemp__department__dept_nameZreport_column_positionCodeemp__position__position_codeZreport_column_positionNameemp__position__position_nameZreport_column_numberOffTimes)r   r   )r   c             C   s   t t|d |d S )Nemp__gender)dictr   get)selfobj r#   BG:\easytimepro\master/mysite/att\api\views\view_report_abnormal.py
get_gender(   s    z#AbnormalReportSerializer.get_genderc               @   s   e Zd ZeZdZdS )zAbnormalReportSerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_namenumber_off_timesatt_dateN)__name__
__module____qualname__r   modelZfieldsr#   r#   r#   r$   Meta+   s   r5   N)r1   r2   r3   r   Z	CharField_r&   r'   r(   r)   ZSerializerMethodFieldr*   r+   r,   r-   r.   r/   r0   r%   r5   r#   r#   r#   r$   r      s$   r   c                   s   e Zd ZeZejeddeddgdB  	ddZ
eZeedZd	d
 Zdd Z fddZdd Zdd Zdd Z  ZS )AbnormalReportViewSetr   )Z
absent__gt      )Zday_off__inr   r0   )listZexportc             C   s   | j | jtS )N)serializer_dictr    actionr   )r!   r#   r#   r$   get_serializer_class>   s    z*AbnormalReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZmenu_att_abnormalReport)r   r6   )r!   r#   r#   r$   get_file_titleB   s    z$AbnormalReportViewSet.get_file_titlec                s  t t|  }| jjj}y| jjjs8d|i}|jf |}| jjjs| jjj	}| jjj
}| jjj}| rx|j| d}| r|j| d }| r|j| d}tt|d}|dkr|ttdtd dB ttdB }W n tk
r   tdY nX |S )	NZemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statuszPlease check with Admin)superr7   get_querysetrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r    r   r   r   	Exceptionr   )r!   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posr?   )	__class__r#   r$   rB   F   s.    





$z"AbnormalReportViewSet.get_querysetc             C   s$   | ddddddddd	d
dd}|S )NZemp_idr   r   r   r   r   r   r   r   r   r0   day_off)values)r!   rJ   r#   r#   r$   annotate_queryset_   s
    
z'AbnormalReportViewSet.annotate_querysetc             O   sb  |  |  }t| |}|d k	rJg }i }d}d}d}	g }
d}x|D ]}|d tjdd }ttt	|d d tt	|dd d }|d }|||	 d kr|d	 dkr~|dkrd}tt	|d d
d  }|

t	|d  ntt	|d d
d  }||krd}n|d7 }||krJ|d7 }|

t	|d  n2d}tt	|d d
d  }g }
|

t	|d  n"|dkr||krd}n|d7 }np|d	 dkr|dkrtt	|d d
d  }||krd}n|d7 }||kr|d7 }|

t	|d  d}|dkr|d |kr||d  d d d ||d  d d< ||d  d d t	|
 ||d  d d< ndt	|
d|d< |||d < d}g }
|dkrd}g }
d}|	t|d krJ|	d7 }	qJW xL| D ]@\}}dt	|d d  d t	|d d  |d< |
| qW | |}| j|dd}| |jS | j|dd}t|jS )Nr   r0      )Zdays         r   rL   r8   r9   r/   countdates)rT   rU   zcount- T)Zmany)filter_querysetrB   r:   rN   datetimeZ	timedeltacalendar
monthrangeintrH   appendlenitemsZpaginate_querysetZget_serializerZget_paginated_responsedatar   )r!   rC   argskwargsrJ   
final_datafinal_data_dictcleartrackeprU   
emp_changedatZprevious_datelast_day_of_monthprev_emp_codecurrent_trackxyZpageZ
serializerr#   r#   r$   r:   g   s    
0








(.

zAbnormalReportViewSet.listc             C   s  |  |  }| |}|d k	rg }i }d}d}d}g }d}x|D ]|}	ttt|	d d d tt|	d dd d }
|	d }||| d kr|	d dkrn|dkrd}tt|	d d	d  }|t|	d  ntt|	d d	d  }||
krd}n|d7 }||kr:|d7 }|t|	d  n2d}tt|	d d	d  }g }|t|	d  n"|dkr||
krd}n|d7 }np|	d dkr|d
krtt|	d d	d  }||
krd}n|d7 }||kr|d7 }|t|	d  d}|dkr|	d |krp||	d  d d d ||	d  d d< ||	d  d d t| ||	d  d d< ndt|d|	d< |	||	d < d}g }|dkrd}g }d}|t|d krF|d7 }qFW xL|	 D ]@\}}dt|d d  d t|d d  |d< || qW |S d S )Nr   rO   r0   rP   rQ   rR   r   rL   rS   r8   r9   r/   rT   rU   )rT   rU   zcount-rV   )
rW   rB   rN   rY   rZ   r[   rH   r\   r]   r^   )r!   rJ   rb   rc   rd   re   rf   rU   rg   rh   ri   rj   rk   rl   rm   r#   r#   r$   get_export_queryset   s    

2








(.
z)AbnormalReportViewSet.get_export_queryset)r1   r2   r3   r   r4   ZobjectsrE   r   Zselect_relatedZorder_byrJ   r
   Zfilter_classr   r;   r=   r>   rB   rN   r:   rn   __classcell__r#   r#   )rK   r$   r7   3   s   $Qr7   )%ZsixZdjango_filtersrY   collectionsr   rX   Zdjango.utils.translationr   r6   r   Zrest_frameworkr   r   Zrest_framework.exceptionsr   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr	   r
   Zmysite.att.modelsr   Zrest_framework.responser   Zdjango.db.modelsr   Zmysite.personnel.db_constr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinr7   r#   r#   r#   r$   <module>   s$   