B
    bG$                 @   sP  d dl mZmZ d dlmZ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 d dlmZmZ d dlZd d	lmZ d d
lmZ d dlmZmZmZmZmZmZ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'Z'd dl(Z(d dl)Z)d dl*m+Z+ d dlm,Z, d dl-m.Z. d Z/G dd dej0Z1G dd dej2e!e#Z3dS )    )gettext_lazyactivate)mixinsserializersN)APIException)NoneSerializer)LeaveSettings)	FilterSet)STATUS_VALIDSTATUS_RESIGN_PENDING)Response)Employee)SumCountCaseWhenValueIntegerField
FloatField)ReportUtilGenericViewSetIntegerFormatFieldWorkDayRelatedFieldsUpdateUtil)IntegerFormatLeaveSummaryField)PayloadBase)ReportGenericFilter)CHOICE_GENDER)Q)
C_ATT_RULEc                   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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jddZe Ze Z fddZdd ZG dd dZ  ZS ) MonthlyotSummaryReportSerializerZ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_gender)r    Zreport_column_departmentCodeemp__department__dept_codeZreport_column_departmentNameemp__department__dept_namezTotal OTsum_otovertime)r    r!   
format_keyzTotal WTsum_wtZTotalsum_)r#   c                sL   | d}tt| j|| x*|jD ] \}}}t||ddd| j|< q$W d S )NviewTr(   )r    r!   r#   r)   )popsuperr   __init__date_periodr   fields)selfargskwargsr,   r!   Zfiledr    )	__class__ JG:\easytimepro\master/mysite/att\api\views\view_report_monthlyotsummary.pyr/   1   s
    
z)MonthlyotSummaryReportSerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r2   objr6   r6   r7   
get_gender8   s    z+MonthlyotSummaryReportSerializer.get_genderc               @   s   e Zd ZeZdZdS )z%MonthlyotSummaryReportSerializer.Meta)
first_name	last_name	dept_name	dept_codeemp_codetotal_ottotal_wttotalwork_daydurationgenderatt_datewhole_day_durationN)__name__
__module____qualname__r   modelr1   r6   r6   r6   r7   Meta;   s   rN   )rJ   rK   rL   r   Z	CharField_rA   r=   r>   ZSerializerMethodFieldrG   r@   r?   r   rB   rC   rD   r   rE   r   rF   rI   r/   r<   rN   __classcell__r6   r6   )r5   r7   r   !   s"   r   c                   s   e Zd ZeZej  Ze	Z
dddgZeedZdZi Zdd Z fdd	Zd
d Z fddZdd Zdd Zdd Zdd Z  ZS )MonthlyotSummaryReportViewSetrC   rD   rB   )listZexportNc             C   s   | j | jtS )N)serializer_dictr:   actionr   )r2   r6   r6   r7   get_serializer_classQ   s    z2MonthlyotSummaryReportViewSet.get_serializer_classc                s   | |d< t t| j||S )Nr,   )r.   rQ   get_serializer)r2   r3   r4   )r5   r6   r7   rV   U   s    z,MonthlyotSummaryReportViewSet.get_serializerc             C   s   t d tdS )NZenz!Monthly Status Report(OT Summary))r   rO   )r2   r6   r6   r7   get_file_titleY   s    z,MonthlyotSummaryReportViewSet.get_file_titlec                s  t t|  }| jjj}y| jjjs8d|i}|jf |}| jjjs| jjj	}| jjj
}| jjj}| rx|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 }W n tk
r   tdY nX |S )	NZemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statuszPlease check with Admin)r.   rQ   get_querysetrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r:   r   r
   r   	Exceptionr   )r2   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrX   )r5   r6   r7   rZ   ]   s.    





$z*MonthlyotSummaryReportViewSet.get_querysetc             C   s  | 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ttdddt dd}|  }|tkr| 	|}| j
jdd }| j
jdd }g }d | _|r|rtd}tj|d|d d d}tj|d|d d d}|| _x|||krttt|d
dt d|d|d < ||d|d|df | j|d |tjdd7 }qW || _|jf |}|S )NZemp_idr   r"   r$   r8   r%   r&   Zemp__position__position_codeZemp__position__position_nameZovertime__total_ot)Zoutput_fieldZtotal_workedrF   r   rE   )Zduration__gtthen)r'   r+   r*   Zsum_durationZsum_work_day
start_dateend_datez[-:\s]    z%Y%m%d)rH   rc   z	sum_ot_%sz%dz	sum_ot_%dzot_%d   )days)valuesZorder_byr   r   r   r   r   Zget_work_day_display WORK_DAY_DISPLAY_BY_TOTAL_RECORDZupdate_fields_for_workdayr[   ZGETr:   	startdaterecompiledatetimestrptimesubstrftimeappendsummary_fieldsZ	timedeltar0   Zannotate)r2   rb   rj   Zwork_day_displayrd   re   r0   patternr6   r6   r7   annotate_querysetv   s@    


&z/MonthlyotSummaryReportViewSet.annotate_querysetc             C   sz   |  |  }| |}| | j}| j| xD|D ]<}|d sJd|d< |d sZd|d< |d |d  }||d< q6W |S )Nr+   r   r'   r*   )filter_querysetrZ   rv   generate_time_maprl   extra_headers_translation_dictupdate)r2   rb   time_mapdwtr6   r6   r7   get_export_queryset   s    

z1MonthlyotSummaryReportViewSet.get_export_querysetc       	      O   s   |  |  }| |}| |}|d k	rxD|D ]<}|d sDd|d< |d sTd|d< |d |d  }||d< q0W | j|dd}| |jS | j|dd}t|jS )Nr+   r   r'   r*   T)Zmany)rw   rZ   rv   Zpaginate_querysetrV   Zget_paginated_responsedatar   )	r2   r[   r3   r4   rb   Zpager|   r}   Z
serializerr6   r6   r7   rR      s    


z"MonthlyotSummaryReportViewSet.listc       
      C   s   dddddddg}i }|j |j }}tt|t|d }xNt|D ]B}tt|t||d }d	|d  }	d
|d || f ||	< qFW |S )NMTWZThFZStSrh   zot_%02dz%s %s)ZyearZmonthcalendarZ
monthrangeintrangeZweekday)
r2   rd   Zsym_weekr{   ymri   iZwofkr6   r6   r7   rx      s    z/MonthlyotSummaryReportViewSet.generate_time_map)rJ   rK   rL   r   rM   Zobjectsr_   Zselect_relatedrb   r   Zfilter_classrt   r   rS   r0   ry   rU   rV   rW   rZ   rv   r~   rR   rx   rP   r6   r6   )r5   r7   rQ   C   s    
&rQ   )4Zdjango.utils.translationr   rO   r   Zrest_frameworkr   r   Zdjango_filtersZrest_framework.exceptionsr   Zmysite.att.api.serializersr   Zmysite.att.modelsr   Zdjango_filters.rest_frameworkr	   Zmysite.admin.modelsr
   r   ZsixZrest_framework.responser   Zmysite.personnel.modelsr   Zdjango.db.modelsr   r   r   r   r   r   r   Zmysite.att.api.utils_classr   r   r   r   r   r   ro   rm   r   Zmysite.personnel.db_constr   r   Zmysite.att.global_cacher   rk   ZModelSerializerr   ZListModelMixinrQ   r6   r6   r6   r7   <module>   s.   $"