B
    bh                 @   s   d dl 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 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 )    )	CharFieldValueWhenCase)Q)Concat)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)short_date_format)CHOICE_GENDER)Holiday)
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dZej
eddZej
eddZdd Zdd Zdd ZG d d! d!Zd"S )#ExceptionReportSerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r   r   Z
allow_nullZreport_column_lastNameemp__last_nameZemp_field_localizedNameemp__nicknameZreport_column_gender)r   Zdepartment_field_codeemp__department__dept_codeZemployee_field_departmentemp__department__dept_nameZposition_field_codeemp__position__position_codeZemployee_field_positionemp__position__position_nameZreport_column_timeIntervalNametimetable__aliasZ"report_column_exceptionDescriptionZreport_column_attendanceDatec             C   s   t t|d |d S )Nemp__gender)dictr   get)selfobj r(   CG:\easytimepro\master/mysite/att\api\views\view_report_exception.py
get_gender.   s    z$ExceptionReportSerializer.get_genderc             C   s   |d sdS t |d S )Natt_date )r   )r&   r'   r(   r(   r)   get_att_date1   s    z&ExceptionReportSerializer.get_att_datec             C   s@   d}|d sd td|}|d s4d td|}|d d S )Nr,   	clock_outz{0},{1}Zreport_exceptionDisplay_missOutclock_inZreport_exceptionDisplay_missIn)format_)r&   r'   Zremarkr(   r(   r)   get_description6   s    z)ExceptionReportSerializer.get_descriptionc               @   s   e Zd ZeZdZdS )zExceptionReportSerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_namer:   r9   r+   Zweekday	timetabledescriptionN)__name__
__module____qualname__r   modelZfieldsr(   r(   r(   r)   Meta>   s   rC   N)r?   r@   rA   r   r   r2   r4   r5   r6   r7   ZSerializerMethodFieldr8   r:   r9   r;   r<   r=   r>   r+   r*   r-   r3   rC   r(   r(   r(   r)   r      s*   r   c                   st   e Zd ZeZej  jdd	ddZ
eZeedZdd Zdd	 Zd
d Zdd Z fddZdd Z  ZS )ExceptionReportViewSet   )Zday_offr   r+   )listZexportc             C   s   | j | jtS )N)serializer_dictr%   actionr   )r&   r(   r(   r)   get_serializer_classQ   s    z+ExceptionReportViewSet.get_serializer_classc             C   s   t d tdS )NZenzMissed In & Out Punch Report)r	   r2   )r&   r(   r(   r)   get_file_titleU   s    z%ExceptionReportViewSet.get_file_titlec             C   s>   | td dtd dB ddddddd	d
dddddd}|S )N)r/   )r.   Zemp_idr   r#   r   r   r   r   r   r    r!   r"   r+   r/   r.   )filterr   values)r&   querysetr(   r(   r)   annotate_querysetY   s
    z(ExceptionReportViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetget_querysetrN   )r&   rM   r(   r(   r)   get_export_querysetl   s    
z*ExceptionReportViewSet.get_export_querysetc                s   t t|  }| jjj}| jjjs6d|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)superrD   rP   requestuserZcurrent_companyZis_employeerK   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r%   r   r   r   )r&   rM   Z
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrR   )	__class__r(   r)   rP   q   s(    





 z#ExceptionReportViewSet.get_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)rO   rP   rN   Zpaginate_querysetZget_serializerZget_paginated_responsedatar   )r&   rU   argskwargsrM   ZpageZ
serializerr(   r(   r)   rF      s    

zExceptionReportViewSet.list)r?   r@   rA   r   rB   ZobjectsrP   Zselect_relatedZexcludeZorder_byrM   r   Zfilter_classr   rG   rI   rJ   rN   rQ   rF   __classcell__r(   r(   )rZ   r)   rD   F   s   rD   N)'Zdjango.db.modelsr   r   r   r   r   Zdjango.db.models.functionsr   Zdjango.utils.translationr   r2   r	   Zrest_frameworkr
   r   Zrest_framework.responser   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   Zmysite.att.modelsr   Zmysite.att.utilsr   Zmysite.personnel.db_constr   Zmysite.att.models.model_holidayr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinrD   r(   r(   r(   r)   <module>   s    -