B
    )ec(                 @   s  d dl Z d dlmZmZmZmZ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 d dlmZ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"m#Z# d dlm$Z$m%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)SumCaseWhenMaxValue)gettext_lazyactivate)mixinsserializers)action)Response)NoneSerializer)ReportUtilGenericViewSetIntegerFormatFieldReportGenericFilter)PayloadMulPunchSet)short_date_format)CHOICE_GENDER)Q)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDING)TimeInterval	BreakTimec                   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ZejeddddZej
eddZ fddZdd Zdd Zd d! ZG d"d# d#Z  ZS )$MulBreakTimeSerializerZ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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_summaryTotalTimeDurationZreport_column_timetabletimetable__aliasZreport_column_attendanceDatec                s   ddl m} d|kr|d}tt| j|| | }xt|jD ]}tj	t
ddj|dd|d| jd	j|d< tj	t
d
dj|dd|d| jdj|d< tt
ddj|dddd| jdj|d< qBW d S )Nr   )get_short_time_formatviewreport_column_breakOutTimez	in{index})indexT)r   r   r   formatzbreak_out{index}report_column_breakInTimez
out{index}zbreak_in{index}report_column_totalTimeDurationztotal{index}
break_time)r   r   r   Z
format_keyztotal_time{index})mysite.att.utilsr'   popsuperr   __init__range	max_indexr
   ZDateTimeField_r+   fieldsr   )selfargskwargsr'   r(   Zshort_time_formati)	__class__ FG:\easytimepro\master/mysite/att\api\views\view_report_mulbreaktime.pyr2   ,   s    
zMulBreakTimeSerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r7   objr<   r<   r=   
get_gender=   s    z!MulBreakTimeSerializer.get_genderc             C   s   |d sdS t |d S )Natt_date )r   )r7   rA   r<   r<   r=   get_att_date@   s    z#MulBreakTimeSerializer.get_att_datec             C   s   | j d jj}d}tjj||d dd}xz|D ]r}tjj|d dd}xT|D ]L}|d d	k r|tj	|d d

d}qTtj	|d d	 |d d	 d
d}qTW q2W |S )NrequestrD   r&   )
company_idaliasr.   r   )idduration<   )minutez%H:%M)ZhourrL   )contextusercurrent_companyr   objectsfilterZvalues_listr   datetimetimestrftime)r7   rA   rG   Zsummary_timeZtimetable_dataZeachZbreaktime_datarJ   r<   r<   r=   get_total_timeE   s    

,z%MulBreakTimeSerializer.get_total_timec               @   s   e Zd ZeZdZdS )zMulBreakTimeSerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_namerC   	timetableZweekday
total_timeN)__name__
__module____qualname__r   modelr6   r<   r<   r<   r=   MetaR   s   re   )ra   rb   rc   r
   Z	CharFieldr5   rV   rW   rX   rY   ZSerializerMethodFieldrZ   r\   r[   r]   r^   r`   r_   rC   r2   rB   rE   rU   re   __classcell__r<   r<   )r;   r=   r      s*   r   c               @   s   e Zd ZG dd dZdS )MulBreakTimeSummaryFilterc               @   s   e Zd ZeZddddgZdS )zMulBreakTimeSummaryFilter.MetaZ	employeesZdepartmentsZ
start_dateZend_dateN)ra   rb   rc   r   rd   r6   r<   r<   r<   r=   re   [   s   re   N)ra   rb   rc   re   r<   r<   r<   r=   rg   Z   s   rg   c                   s   e Zd ZeZejjdd dZ	e
Zg ZeeedZdZdd Z fdd	Zd
d Zdd Z fddZdd Z fddZdd Zedgdddd Z  ZS )MulBreakTimeViewSet   )Z	data_typerC   )listZexportperiod_count   c       	      C   s&  | tddpd| _|dd}|jtdd}ddd	d
ddddddddg}|j| }i }xt| jD ]}dj	|d}dj	|d}dj	|d}tt
t|d dd||< tt
t|d dd||< tt
t|d ddtdd||< dj	|d}|| jkrl| j| qlW |jf |}|S )N
data_indexZdata_index__maxrl   r   rC   r`   )	total_allr   r    r!   r>   r"   r#   r$   r%   r&   rn   z	in{index})r*   z
out{index}ztotal{index}Zclock_in)rm   ZthenZ	clock_outr   )defaultztotal_time{index})Z	aggregater   r@   r4   order_byZannotater   valuesr3   r+   r   r   r   summary_fieldsappend)	r7   querysetrq   Zparamsr:   Zin_keyZout_keyZ	total_keyZ
temp_fieldr<   r<   r=   annotate_querysetm   s(    

$
z%MulBreakTimeViewSet.annotate_querysetc                s   | |d< t t| j||S )Nr(   )r1   rh   get_serializer)r7   r8   r9   )r;   r<   r=   rv      s    z"MulBreakTimeViewSet.get_serializerc             C   s   | j | jtS )N)serializer_dictr@   r   r   )r7   r<   r<   r=   get_serializer_class   s    z(MulBreakTimeViewSet.get_serializer_classc             C   s   t d tdS )NZenzBreak Time Report)r   r5   )r7   r<   r<   r=   get_file_title   s    z"MulBreakTimeViewSet.get_file_titlec                s   t t| |}xnt|D ]b\}}|dr>ttd||< q|drZttd||< q|dr|dkrttd||< qW |S )NZbreak_inr,   Z	break_outr)   r`   r-   )r1   rh   get_headers_translation	enumerate
startswithstrr5   )r7   Zexport_headersZresult_listr:   v)r;   r<   r=   rz      s    


z+MulBreakTimeViewSet.get_headers_translationc             C   s   |  |  }| |}|S )N)filter_querysetget_querysetru   )r7   rt   r<   r<   r=   get_export_queryset   s    
z'MulBreakTimeViewSet.get_export_querysetc                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)r1   rh   r   rF   rN   Zis_employeerO   rQ   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctr}   r   r@   r   r   r   )r7   rt   rG   Zbase_filterZ	auth_deptZ	auth_areaZauth_posr   )r;   r<   r=   r      s(    





 z MulBreakTimeViewSet.get_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)r   r   ru   Zpaginate_querysetrv   Zget_paginated_responsedatar   )r7   rF   r8   r9   rt   ZpageZ
serializerr<   r<   r=   rj      s    

zMulBreakTimeViewSet.listr@   F)methodsZdetailc             C   sF   dd l }ddlm} | |  }| |}||d| jd}|S )Nr   )HttpResponse)coder   )jsonZdjango.httpr   r   r   ru   dumpsr4   )r7   rF   r   r   rt   Zresponser<   r<   r=   rk      s    
z MulBreakTimeViewSet.period_count)ra   rb   rc   r   rd   rP   rQ   Zselect_relatedrp   rt   rg   Zfilter_classrr   r   rw   r4   ru   rv   rx   ry   rz   r   r   rj   r   rk   rf   r<   r<   )r;   r=   rh   `   s"   rh   )+rR   Zdjango.db.modelsr   r   r   r   r   Zdjango.utils.translationr   r5   r   Zrest_frameworkr	   r
   Zrest_framework.decoratorsr   Zrest_framework.responser   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   r   Zmysite.att.modelsr   r/   r   Zmysite.personnel.db_constr   r   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   r   ZModelSerializerr   rg   ZListModelMixinrh   r<   r<   r<   r=   <module>   s"   @