B
    Cc2                 @   s  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mZmZmZ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 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 )    )gettext_lazyactivate)mixinsserializers)APIException)NoneSerializer)Response)SumCountCaseWhenValueIntegerField
FloatFieldQ)ReportUtilGenericViewSetWorkDayRelatedFieldsUpdateUtil#IntegerFormatLeaveCountSummaryFieldIntegerFormatCountField)PayloadBase)CHOICE_GENDER)get_categoriesget_leave_summary_dict)ReportGenericFilter)report_dict)r   )
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc                   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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jed(d)dZejdd*Ze Ze Z fd+d,Zd-d. ZG d/d0 d0Z   Z!S )1$MonthlystatusSummaryReportSerializerZ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Presentsum_present_countpresent)r    r!   Z
format_keyAbsentsum_absent_countabsentHolidaysum_holiday_timeszHoliday Presentsum_holiday_presentzWeek Offsum_week_offzWeek Off Presentsum_week_off_presentZreport_column_leaveDuration	sum_leaveleavezTotal Present
sum_worked)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)indexZcategory_namer   T)r    r!   Zformat_indexleave_summary_dictr#   )superr   __init__r   r   formatr   fields)selfargskwargs
categoriesr:   cgfield)	__class__ NG:\easytimepro\master/mysite/att\api\views\view_report_monthlystatussummary.pyr<   2   s    
z-MonthlystatusSummaryReportSerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r?   objrF   rF   rG   
get_gender?   s    z/MonthlystatusSummaryReportSerializer.get_genderc               @   s   e Zd ZeZdZdS )z)MonthlystatusSummaryReportSerializer.Meta)r,   total_holiday_times
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_nameemp_codetotal_week_offtotal_absenttotal_holiday_presentwhole_day_durationtotal_week_off_presenttotal_leavetotal_presentwork_daydurationatt_dateN)__name__
__module____qualname__r   modelr>   rF   rF   rF   rG   MetaB   s   re   )"ra   rb   rc   r   Z	CharField_rV   rN   rO   rP   ZSerializerMethodFieldrQ   rS   rR   rT   rU   r   r,   rX   r   rM   rY   rW   r[   r\   r]   r   r^   r_   rZ   r<   rL   re   __classcell__rF   rF   )rE   rG   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dd Zdd Zdd Zdd Z  ZS )!MonthlystatusSummaryReportViewSetr,   rM   rW   rX   rY   r\   r[   r]   )listZexportc             C   s   | j | jtS )N)serializer_dictrJ   actionr   )r?   rF   rF   rG   get_serializer_class\   s    z6MonthlystatusSummaryReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZmonthly_status_summary_report)r   rf   )r?   rF   rF   rG   get_file_title`   s    z0MonthlystatusSummaryReportViewSet.get_file_titlec                s  t t|  }| jjj}| jjjs6d|i}|jf |}y| 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;   rh   get_querysetrequestusercurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   rJ   r   r   r   	Exceptionr   )r?   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrn   )rE   rF   rG   rp   d   s.    





$z.MonthlystatusSummaryReportViewSet.get_querysetc             C   s  ddl m} |tddp"tddj|ddddd	d
dddddd
dd}ttt	dt
ddt dtdt dttt	dt
ddt dttt	ddt
ddt dttt	ddt
ddt dttt	d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tt	dd!d"t dd#}|  }|tkr| |}t }x>|D ]6}d$j|d% d&| jkr| jd$j|d% d& qW |jf |}|S )'Nr   )ExtractMonth)duration__gt)Zwhole_day_duration__gtr`   )ZmonthZemp_idr   r"   r$   r%   rH   r&   r'   r(   r)   Zemp__department_id   )total_worked__gtthen)Zoutput_fieldZduty_worked   )day_offr~   )r   r}   r~      )r   r6   r~   )Zlate__gtr~   )Zearly_leave__gtr~   r/   r6   r_   Zduty_durationr^   )r{   r~   )r7   r+   r1   r2   r3   r4   Zsum_late_timesZsum_early_leave_timesr.   r5   Zsum_durationZsum_duty_durationZsum_work_dayzleave_{index}r8   )r9   )Zdjango.db.models.functionsrz   rt   r   ZannotatevaluesZorder_byr	   r   r   r   r   r   Zget_work_day_display WORK_DAY_DISPLAY_BY_TOTAL_RECORDZupdate_fields_for_workdayr   r=   summary_fieldsappend)r?   ry   rz   r   Zwork_day_displayrB   rC   rF   rF   rG   annotate_queryset}   s>    


z3MonthlystatusSummaryReportViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetrp   r   )r?   ry   rF   rF   rG   get_export_queryset   s    
z5MonthlystatusSummaryReportViewSet.get_export_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)r   rp   r   Zpaginate_querysetget_serializerZget_paginated_responsedatar   )r?   rq   r@   rA   ry   ZpageZ
serializerrF   rF   rG   ri      s    

z&MonthlystatusSummaryReportViewSet.listc                sL  ddl m} t|| jjj}|dddid |dddid |ddd	id |d
ddid |dddid |dddid |dddid |dddid d g }t }dd |D }t| drdd | j	j
jD }|   }| fdd| D  |  x|D ]t}	|	|kr"t| j	|	r"t| j	|	}
t|
drb|
j||	< n2t|
tr"t|
dr"t|
jdr"|
jj||	< q"W nt| jrt| j }ni }t| dr|| j xt|D ]l}||rt||}n(dt|kr||t|}nt|}|dkr8|dkr8d}|| qW |S ) Nr   )get_report_settingr,   ZsymbolPr/   AZholidayHZ	holiday_pZHPZweekday_offZWOZ	weekday_pZWOPZlateLZearly_leaveZEL)r*   r-   r0   zHoliday PresentzWeek OffzWeek Off PresentZLatezEarly Leavec             S   s"   i | ]}|d  dj |d dqS )Zreport_symbolzleave_{index}r8   )r9   )r=   ).0rC   rF   rF   rG   
<dictcomp>   s    zMMonthlystatusSummaryReportViewSet.get_headers_translation.<locals>.<dictcomp>rd   c             S   s   i | ]}|j |jqS rF   )Zverbose_namename)r   rD   rF   rF   rG   r      s    c                s(   i | ] \}}|j r |j |j |qS rF   )r    rJ   )r   r   rD   )export_dictrF   rG   r      s    short_descriptionfgetextra_headers_translation_dictr6   r8   ZID)Zmysite.att.utilsr   rI   rq   rr   rs   rJ   r   hasattrrd   Z_metar>   r   Z
get_fieldsupdateitemsgetattrr   
isinstancepropertyr   r   basenamer   rw   r   )r?   Zexport_headersr   r   Ztranslated_headersrB   Z
leave_nameZverbose_namesr>   r   attrheaderZtemp_headerrF   )r   rG   get_headers_translation   sZ    



z9MonthlystatusSummaryReportViewSet.get_headers_translation)ra   rb   rc   r   rd   Zobjectsrv   Zselect_relatedry   r   Zfilter_classr   r   rj   rl   rm   rp   r   r   ri   r   rg   rF   rF   )rE   rG   rh   M   s   
$rh   N)/Zdjango.utils.translationr   rf   r   Zrest_frameworkr   r   Zrest_framework.exceptionsr   Zmysite.att.api.serializersr   Zrest_framework.responser   Zdjango.db.modelsr	   r
   r   r   r   r   r   r   Zmysite.att.api.utils_classr   r   r   r   Zmysite.att.modelsr   Zmysite.personnel.db_constr   Zmysite.att.api.utilsr   r   r   Zmysite.api.report_export_dictr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   ZModelSerializerr   ZListModelMixinrh   rF   rF   rF   rG   <module>   s"   (5