B
    Yc(                 @   s0  d dl Z d dlmZmZmZmZmZmZ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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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 Z,dZ-G dd dej.Z/G dd dej0eeZ1dS )    N)CaseWhenIntegerFieldValue
FloatFieldFQ)Sum)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)get_categoriesget_leave_summary_dict)ReportGenericFilterWorkDayRelatedFieldsUpdateUtil)ReportUtilGenericViewSetIntegerFormatField#IntegerFormatLeaveCountSummaryFieldIntegerFormatCountField)PayloadBase)CHOICE_GENDER)LeaveCategory)
C_ATT_RULE)r   )STATUS_VALIDSTATUS_RESIGN_PENDING   c                   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eddddZeeddddZeeddddZeed d!d"dZeed#d$d%dZeed&d'd%dZeed(d)d%dZeed*d+d,dZejdd-Ze Ze Z fd.d/Zd0d1 Z G d2d3 d3Z!  Z"S )4EmployeeSummarySerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r!   r"   
allow_nullZreport_column_lastNameemp__last_nameZreport_column_nickName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_lateDurationsum_lateZlate_in)r!   r"   Z
format_keyZ report_column_earlyLeaveDurationsum_early_leaveZ	early_outZreport_column_absentDuration
sum_absentabsentZ!report_column_totalWorkedDuration
sum_workeddurationZreport_column_normalOvertimesum_notZovertimeZreport_column_weekendOvertimesum_wotZreport_column_holidayOvertimesum_hotZreport_column_leaveDuration	sum_leaveleave)r$   c                sb   t t| j|| t }t| }x<|D ]4}dj|d d}t|d d|d |dd| j|< q&W d S )Nzleave_{index}id)indexcategory_namer    T)r!   r"   Zformat_indexleave_summary_dictr$   )superr   __init__r   r   formatr   fields)selfargskwargs
categoriesr9   cgZfield)	__class__ DG:\easytimepro\master/mysite/att\api\views\view_report_empsummary.pyr;   9   s    
z"EmployeeSummarySerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r>   objrD   rD   rE   
get_genderF   s    z$EmployeeSummarySerializer.get_genderc               @   s   e Zd ZeZdZdS )zEmployeeSummarySerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_name
total_latetotal_early_leavetotal_absenttotal_worked	total_not	total_wot	total_hottotal_leavework_dayr0   whole_day_durationN)__name__
__module____qualname__r   modelr=   rD   rD   rD   rE   MetaI   s   rb   )#r^   r_   r`   r   Z	CharField_rK   rL   rM   rN   ZSerializerMethodFieldrO   rQ   rP   rR   rS   r   rT   rU   r   rV   rW   rX   rY   rZ   r[   r   r\   r   r0   r]   r;   rJ   rb   __classcell__rD   rD   )rC   rE   r      s6   r   c                   s   e Zd ZeZej  Ze	Z
ddddddddgZeed	Zd
d Zdd Z fddZ fddZdd Zdd Zdd Z  ZS )EmployeeSummaryViewSetrT   rU   rV   rW   rX   rY   rZ   r[   )listZexportc             C   s   | j | jtS )N)serializer_dictrH   actionr   )r>   rD   rD   rE   get_serializer_classa   s    z+EmployeeSummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenZmenu_att_employeeSummaryReport)r   rc   )r>   rD   rD   rE   get_file_titlee   s    z%EmployeeSummaryViewSet.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)r:   re   get_querysetrequestuserZis_employeeZcurrent_companyfilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   rH   r   r   r   )r>   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrk   )rC   rD   rE   rm   i   s(    





 z#EmployeeSummaryViewSet.get_querysetc       	         s   t t| |}dd t|D }x`t|D ]T\}}xJ|D ]B}td|}tjj|d dj	ddd}|
|r:|d ||< q:W q,W |S )	Nc             S   s   g | ]\}}| d r|qS )r5   )
startswith).0inrD   rD   rE   
<listcomp>   s    zBEmployeeSummaryViewSet.get_headers_translation.<locals>.<listcomp>z\d+r   )r6   r8   T)Zflat)r:   re   get_headers_translation	enumeraterefindallr   objectsrp   Zvalues_listru   )	r>   Zexport_headersZresult_listresultrw   vZeachZcategory_idr8   )rC   rD   rE   rz      s    

z.EmployeeSummaryViewSet.get_headers_translationc             C   sD  | tddstddo tdddddd	d
ddddd
d}tdt dtdt dtdt dtdt dtdt dtdt dtdt dtdt dtdt dtdt dtttdddt dd}| 	 }|t
kr| |}t }x:|D ]2}dj|d d | jkr| jdj|d d  qW |jf |}|S )!Nr   )duration__gt)Zwhole_day_duration__gt   )r\   Zemp_idr    r#   r%   r&   rF   r'   r(   r)   r*   Zlate)Zoutput_fieldZearly_leaver.   rW   Zovertime__normal_otZovertime__weekend_otZovertime__holiday_otr5   r0   Zduty_durationr\   )r   Zthen)r+   r,   r-   r/   r1   r2   r3   r4   Zsum_durationZsum_duty_durationZsum_work_dayzleave_{index}r6   )r7   )rp   r   valuesZorder_byr	   r   r   r   r   Zget_work_day_display WORK_DAY_DISPLAY_BY_TOTAL_RECORDZupdate_fields_for_workdayr   r<   summary_fieldsappendZannotate)r>   rt   r   Zwork_day_displayrA   rB   rD   rD   rE   annotate_queryset   s4     

z(EmployeeSummaryViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetrm   r   )r>   rt   rD   rD   rE   get_export_queryset   s    
z*EmployeeSummaryViewSet.get_export_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)r   rm   r   Zpaginate_querysetZget_serializerZget_paginated_responsedatar   )r>   rn   r?   r@   rt   ZpageZ
serializerrD   rD   rE   rf      s    

zEmployeeSummaryViewSet.list)r^   r_   r`   r   ra   r~   rr   Zselect_relatedrt   r   Zfilter_classr   r   rg   ri   rj   rm   rz   r   r   rf   rd   rD   rD   )rC   rE   re   R   s   %re   )2collectionsZdjango.db.modelsr   r   r   r   r   r   r   Zdjango.db.models.aggregatesr	   Zdjango.utils.translationr
   rc   r   Zrest_frameworkr   r   Zrest_framework.responser   r|   Zmysite.att.api.serializersr   Zmysite.att.api.utilsr   r   Zmysite.att.api.utils_classr   r   r   r   r   r   Zmysite.att.modelsr   Zmysite.personnel.db_constr   Z%mysite.att.models.model_leavecategoryr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   ZWORK_DAY_UNITZModelSerializerr   ZListModelMixinre   rD   rD   rD   rE   <module>   s(   $4