B
    b                 @   s   d dl 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 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 d dlmZ d dlmZ d dlmZmZ eeZG dd dejZG dd deZ G dd de
j!eZ"dS )    N)Q)gettext_lazyactivate)	FilterSet)mixinsserializers)STATUS_VALID)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadPunch)short_date_formatshort_time_formatWEEKDAY)
C_ATT_RULE)r   STATUS_RESIGN_PENDINGc               @   sj  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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dZejedddZejedddZejedddZejedddZejedddZdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZG d+d, d,Zd-S ).PayloadPunchSerializerZreport_column_empCodezemp.emp_code)labelsourceZreport_column_firstNamezemp.first_nameT)r   r   
allow_nullZreport_column_lastNamezemp.last_nameZreport_column_nickNamezemp.nicknameZreport_column_genderzemp.get_gender_display)r   r   Zallow_blankZreport_column_departmentCodezemp.department.dept_codeZreport_column_departmentNamezemp.department.dept_nameZreport_column_positionCodezemp.position.position_codeZreport_column_positionNamezemp.position.position_nameZreport_column_workCodezorig.work_codeZreport_column_attendanceWeekday)r   r   Zreport_column_punchDateZreport_column_punchTimeZreport_column_punchStateZreport_column_correctStatec             C   s   ddl m} y|| jd jjd}W n*   || jd jjjjd}Y nX x$|	 D ]}|d |kr`|d S q`W d S )Nr   )r   request	func_keysvaluename)
mysite.att.global_cacher   getcontextusercurrent_companyZ
departmentZcompanyidvalues)selfr   r   r   v r#   FG:\easytimepro\master/mysite/att\api\views\view_report_scheduledlog.pyget_func_key+   s    $z#PayloadPunchSerializer.get_func_keyc             C   s   |  |jjS )N)r%   origpunch_state)r!   objr#   r#   r$   get_punch_state5   s    z&PayloadPunchSerializer.get_punch_statec             C   s   |  |jS )N)r%   correct_state)r!   r(   r#   r#   r$   get_correct_state8   s    z(PayloadPunchSerializer.get_correct_statec             C   s   |j jrt|j jS dS )N )r&   
punch_timer   )r!   r(   r#   r#   r$   get_att_date;   s    z#PayloadPunchSerializer.get_att_datec             C   s   |j jrt|j j S dS )Nr,   )r&   r-   _WEEKDAYr   weekday)r!   r(   r#   r#   r$   get_weekday@   s    z"PayloadPunchSerializer.get_weekdayc             C   s   |j jrt|j jS dS )Nr,   )r&   r-   r   )r!   r(   r#   r#   r$   get_punch_timeE   s    z%PayloadPunchSerializer.get_punch_timec               @   s   e Zd ZeZdZdS )zPayloadPunchSerializer.Meta)Zuuidemp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_name	work_codeatt_dater0   r-   r'   r*   N)__name__
__module____qualname__r   modelfieldsr#   r#   r#   r$   MetaJ   s   rC   N)r>   r?   r@   r   Z	CharField_r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   ZSerializerMethodFieldr0   r=   r-   r'   r*   r%   r)   r+   r.   r1   r2   rC   r#   r#   r#   r$   r      s4   
r   c               @   s   e Zd ZG dd dZdS )PayloadPunchFilterc               @   s   e Zd ZeZdddddgZdS )zPayloadPunchFilter.MetaZ	employeesZdepartmentsZareasZ
start_dateZend_dateN)r>   r?   r@   r   rA   rB   r#   r#   r#   r$   rC   R   s   rC   N)r>   r?   r@   rC   r#   r#   r#   r$   rE   Q   s   rE   c                   sX   e Zd ZeZej ddddZ	e
ZeedZdd Zdd	 Z fd
dZ  ZS )PayloadPunchViewSetr&   Zempr=   Zorig__punch_time)listZexportc             C   s   | j | jtS )N)serializer_dictr   actionr	   )r!   r#   r#   r$   get_serializer_classb   s    z(PayloadPunchViewSet.get_serializer_classc             C   s   t d tdS )NZenzScheduled Log Report)r   rD   )r!   r#   r#   r$   get_file_titlef   s    z"PayloadPunchViewSet.get_file_titlec                s   t t|  }| jjjs| jjj}d|i}|jf |}| jjjs| jjj	}| jjj
}| jjj}| rv|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 }|S )NZemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__status)superrF   get_querysetr   r   Zis_employeer   filterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r   r   r   r   )r!   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrL   )	__class__r#   r$   rO   j   s(    





 z PayloadPunchViewSet.get_queryset)r>   r?   r@   r   rA   ZobjectsrO   Zselect_relatedZorder_byrT   rE   Zfilter_classr   rH   rJ   rK   __classcell__r#   r#   )rU   r$   rF   W   s   rF   )#Zdjango_filtersZdjango.db.modelsr   Zdjango.utils.translationr   rD   r   Zdjango_filters.rest_frameworkr   Zrest_frameworkr   r   Zmysite.admin.modelsr   Zmysite.att.api.serializersr	   Zmysite.att.api.utils_classr
   r   Zmysite.att.modelsr   Zmysite.att.utilsr   r   r   r   r   r   dictr/   ZModelSerializerr   rE   ZListModelMixinrF   r#   r#   r#   r$   <module>   s    ;