B
    Yb!                 @   sP  d dl Z d dlmZ d dlmZmZmZmZmZ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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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( d Z)dZ*dZ+G dd dej,Z-G dd deZ.G dd dej/eeZ0dS )    N)Q)SumCaseWhenIntegerField
FloatFieldF)gettext_lazyactivate)	FilterSet)mixinsserializers)Response)STATUS_VALID)NoneSerializer)get_categories)ReportUtilGenericViewSetIntegerFormatLeaveFieldReportGenericFilterWorkDayRelatedFieldsUpdateUtil)PayloadBase)CHOICE_GENDER)
C_ATT_RULE)LeaveCategory)r   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jddZe Z fddZdd ZG dd dZ  ZS )LeaveSummaryReportSerializerZ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_name)r"   c                sh   t t| j|| t }xJ|D ]B}dj|d d}dj|d d}t|d ||d dd| j|< qW d S )Nzleave_{index}id)indexzsum_leave{index}Zcategory_nameT)r   r    Zformat_indexr"   )superr   __init__r   formatr   fields)selfargskwargs
categoriescgZfieldkey)	__class__ FG:\easytimepro\master/mysite/att\api\views\view_report_leavesummary.pyr,   3   s    
z%LeaveSummaryReportSerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r/   objr6   r6   r7   
get_gender<   s    z'LeaveSummaryReportSerializer.get_genderc               @   s   e Zd ZeZdZdS )z!LeaveSummaryReportSerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_namework_daydurationN)__name__
__module____qualname__r   modelr.   r6   r6   r6   r7   Meta?   s   rL   )rH   rI   rJ   r   Z	CharField_r=   r>   r?   r@   ZSerializerMethodFieldrA   rC   rB   rD   rE   r   rF   r   rG   r,   r<   rL   __classcell__r6   r6   )r5   r7   r   !   s$   	r   c               @   s   e Zd Zdd ZdS )LeaveSummaryReportFilterc             C   s4   |dkr0| j d}| j d}|j||fd}|S )Nend_date
start_date)Zatt_date__range)datar:   filter)r/   querysetnamevaluerQ   rP   r6   r6   r7   date_filterF   s
    z$LeaveSummaryReportFilter.date_filterN)rH   rI   rJ   rW   r6   r6   r6   r7   rO   E   s   rO   c                   sh   e Zd ZeZej  Ze	Z
g ZeedZdd Zdd Z fddZdd	 Zd
d Zdd Z  ZS )LeaveSummaryReportViewSet)listZexportc             C   s   | j | jtS )N)serializer_dictr:   actionr   )r/   r6   r6   r7   get_serializer_classZ   s    z.LeaveSummaryReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZmenu_att_leaveSummaryReport)r
   rM   )r/   r6   r6   r7   get_file_title^   s    z(LeaveSummaryReportViewSet.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)r+   rX   get_querysetrequestusercurrent_companyZis_employeerS   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r:   r   r   r   )r/   rT   Z
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posr^   )r5   r6   r7   r`   b   s(    





 z&LeaveSummaryReportViewSet.get_querysetc             C   s  | tddddddddd	d
dd
d}tdt dtttdddt dd}t	 }d  }}t
 }t| jjjd }x.| D ]"\}}	t|	d tkr|| qW |  }
|
tkrd|kr|
tkrtd}td}nd}td}|
tksd|krrx|D ]d}dj|d d| jkr<| jdj|d d ttt|d ddt d|dj|d d< qW nvxt|D ]l}dj|d d| jkr| jdj|d d ttt|d dd| | t d|dj|d d< qxW |jf |}|S )Nr   )rF   Zemp_idr   r!   r#   r$   r8   r%   r&   r'   r(   rG   )Zoutput_fieldr   rF   )Zduration__gtthen)Zsum_durationZsum_work_dayitemsZunitZleaveg      ?Zwhole_day_durationzleave_{index}r)   )r*   Zpayloadexception__duration)Z#payloadexception__item__category_idrg   zsum_leave{index})rS   r   valuesZorder_byr   r   r   r   r   r   setr   r:   ra   rb   rc   rh   intWORK_DAY_UNITaddZget_work_day_display WORK_DAY_DISPLAY_BY_TOTAL_RECORD WORK_DAY_DISPLAY_BY_EVERY_RECORDr   r-   summary_fieldsappendZannotate)r/   rT   ri   r2   Zcal_durationZcal_work_dayZwork_fieldsrh   kvZwork_day_displayr3   r6   r6   r7   annotate_querysetx   sH    

"
:z+LeaveSummaryReportViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetr`   rt   )r/   rT   r6   r6   r7   get_export_queryset   s    
z-LeaveSummaryReportViewSet.get_export_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)ru   r`   rt   Zpaginate_querysetZget_serializerZget_paginated_responserR   r   )r/   ra   r0   r1   rT   ZpageZ
serializerr6   r6   r7   rY      s    

zLeaveSummaryReportViewSet.list)rH   rI   rJ   r   rK   Zobjectsr`   Zselect_relatedrT   rO   Zfilter_classrp   r   rZ   r\   r]   rt   rv   rY   rN   r6   r6   )r5   r7   rX   N   s   ,rX   )1Zdjango_filtersZdjango.db.modelsr   r   r   r   r   r   r   Zdjango.utils.translationr	   rM   r
   Zdjango_filters.rest_frameworkr   Zrest_frameworkr   r   Zrest_framework.responser   reZmysite.admin.modelsr   Zmysite.att.api.serializersr   Zmysite.att.api.utilsr   Zmysite.att.api.utils_classr   r   r   r   Zmysite.att.modelsr   Zmysite.personnel.db_constr   Zmysite.att.global_cacher   Z%mysite.att.models.model_leavecategoryr   r   rn   ro   rl   ZModelSerializerr   rO   ZListModelMixinrX   r6   r6   r6   r7   <module>   s0    $	