B
    Ycj)                 @   s  d dl Z d dlmZmZmZ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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'm(Z( d Z)G dd dej*Z+G dd dej,eeZ-dS )    N)SumCountCaseWhenValueIntegerField
FloatFieldQ)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)get_categoriesget_leave_summary_dict)ReportGenericFilterWorkDayRelatedFieldsUpdateUtil)ReportUtilGenericViewSetIntegerFormatFieldIntegerFormatCountField#IntegerFormatLeaveCountSummaryField)PayloadBase)LeaveCategory)r	   )
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc                   sB  e Z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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G d'd( d(Z  ZS ))DepartmentSummarySerializerZreport_column_departmentCodeemp__department__dept_codeT)labelsource
allow_nullZreport_column_departmentNameemp__department__dept_nameZreport_column_employeeCount	emp_count)r   r    Zreport_column_lateDurationsum_late_timesZ report_column_earlyLeaveDurationsum_early_leave_timesZreport_column_absentDurationsum_absent_timessum_lateZlate_in)r   r    Z
format_keysum_early_leaveZ	early_out
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                sf   t t| j|| t }t| dd}x<|D ]4}dj|d d}t|d d|d |dd	| j|< q*W d S )
NZ
department)Zreport_typezleave_{index}id)indexcategory_namer   T)r   r    Zformat_indexleave_summary_dictr!   )superr   __init__r   r   formatr   fields)selfargskwargs
categoriesr5   cgZfield)	__class__ EG:\easytimepro\master/mysite/att\api\views\view_report_deptsummary.pyr7   2   s    
z$DepartmentSummarySerializer.__init__c               @   s   e Zd ZeZdZdS )z DepartmentSummarySerializer.Meta)	dept_code	dept_name	total_emp
total_latetotal_early_leavetotal_absenttotal_late_timestotal_early_leave_timestotal_absent_timeswhole_day_durationtotal_worked	total_not	total_wot	total_hottotal_leavework_dayr,   N)__name__
__module____qualname__r   modelr9   r@   r@   r@   rA   Meta@   s   rV   )rR   rS   rT   r   Z	CharField_rB   rC   r   rD   rH   rI   rJ   r   rE   rF   r   rG   rL   rM   rN   rO   rP   r   rQ   r,   rK   r7   rV   __classcell__r@   r@   )r?   rA   r      s,   r   c                   s   e Zd ZeZej  Ze	Z
dddd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 )DepartmentSummaryViewSetrD   rE   rF   rG   rH   rI   rJ   rL   rM   rN   rO   rP   )listZexportc             C   s   | j | jtS )N)serializer_dictgetactionr   )r:   r@   r@   rA   get_serializer_classX   s    z-DepartmentSummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenzDepartment Summary Report)r   rW   )r:   r@   r@   rA   get_file_title\   s    z'DepartmentSummaryViewSet.get_file_titlec                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)r6   rY   get_querysetrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsalldistinctstrr   r\   r	   r   r   )r:   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posr`   )r?   r@   rA   rb   `   s(    





 z%DepartmentSummaryViewSet.get_querysetc       
         s   t t| |}dd t|D }dd t|D }xt|D ]\}}|dkrbttd||d < |dkr~ttd||d	 < |d
krttd||d < xJ|D ]B}td|}tj	j
|d djddd}	||r|	d ||< qW q>W |S )Nc             S   s,   g | ]$\}}|d ks$|dks$|dkr|qS )LatezEarly LeaveAbsencer@   ).0inr@   r@   rA   
<listcomp>x   s    zDDepartmentSummaryViewSet.get_headers_translation.<locals>.<listcomp>c             S   s   g | ]\}}| d r|qS )r1   )
startswith)rm   rn   ro   r@   r@   rA   rp   y   s    rk   ZDept_summary_late_times   zEarly LeaveZDept_summary_early_leave_times   rl   ZDept_summary_absent_times   z\d+r   )r2   r4   T)Zflat)r6   rY   get_headers_translation	enumerateri   rW   refindallr   objectsre   Zvalues_listrq   )
r:   Zexport_headersZresult_listresultZresult1rn   vZeachZcategory_idZ
get_object)r?   r@   rA   ru   v   s     

z0DepartmentSummaryViewSet.get_headers_translationc             C   s  | tddstddo tdddddd}td	d
dtdt dtdt dtdt dtttdt	ddt dtttdt	ddt dtttdt	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ttdddt
 dd}|  }|tkrD| |}t }x\|D ]T}dj|d d| jkr| jdj|d d t	dt d|d j|d d< qPW |jf |}|S )!Nr   )duration__gt)Zwhole_day_duration__gt   )rQ   Zemp__department_idr   r"   ZempT)rh   Zlate)Zoutput_fieldZearly_leaver*   )Zlate__gtthen)Zearly_leave__gtr~   )Z
absent__gtr~   rL   Zovertime__normal_otZovertime__weekend_otZovertime__holiday_otr1   r,   Zduty_durationrQ   )r|   r~   )r#   r'   r(   r)   r$   r%   r&   r+   r-   r.   r/   r0   Zsum_durationZsum_duty_durationZsum_work_dayzleave_{index}r2   )r3   zsum_leave{index})re   r	   valuesZorder_byr   r   r   r   r   r   r   Zget_work_day_display WORK_DAY_DISPLAY_BY_TOTAL_RECORDZupdate_fields_for_workdayr   r8   summary_fieldsappendZannotate)r:   rj   r   Zwork_day_displayr=   r>   r@   r@   rA   annotate_queryset   s:     




$z*DepartmentSummaryViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetrb   r   )r:   rj   r@   r@   rA   get_export_queryset   s    
z,DepartmentSummaryViewSet.get_export_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)r   rb   r   Zpaginate_querysetZget_serializerZget_paginated_responsedatar   )r:   rc   r;   r<   rj   ZpageZ
serializerr@   r@   rA   rZ      s    

zDepartmentSummaryViewSet.list)rR   rS   rT   r   rU   ry   rg   Zselect_relatedrj   r   Zfilter_classr   r   r[   r^   r_   rb   ru   r   r   rZ   rX   r@   r@   )r?   rA   rY   I   s   

'rY   ).ZdatetimeZdjango.db.modelsr   r   r   r   r   r   r   r	   Zdjango.utils.translationr
   rW   r   Zrest_frameworkr   r   Zrest_framework.responser   rw   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.att.models.model_leavecategoryr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   ZModelSerializerr   ZListModelMixinrY   r@   r@   r@   rA   <module>   s"   (.