B
    CcG8                 @   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mZ d dl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+ G dd dej,Z-G dd dej.eZ/dS )    N)QSumCountCaseWhenValueIntegerField
FloatField)gettext_lazyactivate)mixinsserializers)Response)APIException)NoneSerializer)get_categoriesget_leave_summary_dict)ReportGenericFilterReportUtilGenericViewSetIntegerFormatCountField#IntegerFormatLeaveCountSummaryField)value_format)PayloadBase)CHOICE_GENDER)report_dict)
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je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jed&d'dZejed(d)dZeed*d+d,dZ fd-d.Zd/d0 ZG d1d2 d2Z  ZS )3YearlySummarySerializerZ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MonthPresentsum_present_timespresent)r    r!   Z
format_keyAbsentsum_absent_timesabsentHolidaysum_holiday_timeszHoliday Presentsum_holiday_present_timeszWeek Offsum_week_off_timeszWeek Off Presentsum_week_off_present_timesLatesum_late_timeszEarly Leavesum_early_leave_timeszTotal Leavesum_leave_timesleavec                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__ GG:\easytimepro\master/mysite/att\api\views\view_report_yearlySummary.pyr>   1   s    
z YearlySummarySerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)rA   objrH   rH   rI   
get_gender;   s    z"YearlySummarySerializer.get_genderc               @   s   e Zd ZeZdZdS )zYearlySummarySerializer.Meta)monthtotal_present_timestotal_holiday_times
first_name	last_name	nick_namegender	dept_name	dept_codeposition_codeposition_nameemp_codetotal_week_off_timestotal_late_timestotal_early_leave_timestotal_absent_timestotal_holiday_present_timestotal_week_off_present_timestotal_leave_timesatt_dateN)__name__
__module____qualname__r   modelr@   rH   rH   rH   rI   Meta>   s   rg   ) rc   rd   re   r   Z	CharField_rZ   rR   rS   rT   ZSerializerMethodFieldrU   rW   rV   rX   rY   r   rO   r   rP   r^   rQ   r_   r[   r`   r\   r]   ra   r>   rN   rg   __classcell__rH   rH   )rG   rI   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
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 )YearlySummaryViewSetrP   r\   rQ   r[   r]   r^   r_   Ztotal_leaver`   ra   )listZexportc             C   s   | j | jtS )N)serializer_dictrL   actionr   )rA   rH   rH   rI   get_serializer_classW   s    z)YearlySummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenzYearly Summary Report)r   rh   )rA   rH   rH   rI   get_file_title[   s    z#YearlySummaryViewSet.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=   rj   get_querysetrequestusercurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   rL   r   r   r   	Exceptionr   )rA   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posrp   )rG   rH   rI   rr   _   s.    





$z!YearlySummaryViewSet.get_querysetc       	      C   s,  ddl m} |j|ddddddd	d
ddddddd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 }xl|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$< qTW |jf |}x^|D ]V}xN| D ]B\}}d(|kr|d)kr|d k	rt|d|d* |d+ ||< qW qW |S ),Nr   )ExtractMonthrb   )rO   rO   Zemp_idr   r"   r$   r%   rJ   r&   r'   r(   r)   Zemp__department_idZduty_worked)Zoutput_field      )day_offthen)r   Ztotal_worked__gtr      )r   r9   r   )Zlate__gtr   )Zearly_leave__gtr   r/   r9   ZdurationZduty_durationZwork_day)Zduration__gtr   )r+   r1   r2   r3   r4   r6   r7   r.   r8   sum_durationZsum_duty_durationsum_work_dayzleave_{index}r:   )r;   Zpayloadexception__duration)Z#payloadexception__item__category_idr   zsum_leave{index}Z	sum_leaver8   r   r   )Zdjango.db.models.functionsr|   ZannotatevaluesZorder_byr   r   r   r   r   r	   r   r?   summary_fieldsappenditemsr   )	rA   r{   r|   r   rD   rE   datakeyvalrH   rH   rI   annotate_querysetx   sJ    
	
 
&z&YearlySummaryViewSet.annotate_querysetc             C   s   |  |  }| |}|S )N)filter_querysetrr   r   )rA   r{   rH   rH   rI   get_export_queryset   s    
z(YearlySummaryViewSet.get_export_querysetc             O   s\   |  |  }| |}| |}|d k	rD| j|dd}| |jS | j|dd}t|jS )NT)Zmany)r   rr   r   Zpaginate_querysetget_serializerZget_paginated_responser   r   )rA   rs   rB   rC   r{   ZpageZ
serializerrH   rH   rI   rk      s    

zYearlySummaryViewSet.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lateZLTZearly_leaveZEL)r*   r-   r0   zHoliday PresentzWeek OffzWeek Off Presentr5   zEarly Leavec             S   s"   i | ]}|d  dj |d dqS )Zreport_symbolzleave_{index}r:   )r;   )r?   ).0rE   rH   rH   rI   
<dictcomp>   s    z@YearlySummaryViewSet.get_headers_translation.<locals>.<dictcomp>rf   c             S   s   i | ]}|j |jqS rH   )Zverbose_namename)r   rF   rH   rH   rI   r      s    c                s(   i | ] \}}|j r |j |j |qS rH   )r    rL   )r   r   rF   )export_dictrH   rI   r      s    short_descriptionfgetextra_headers_translation_dictr9   r:   ZID)mysite.att.utilsr   rK   rs   rt   ru   rL   r   hasattrrf   Z_metar@   r   Z
get_fieldsupdater   getattrr   
isinstancepropertyr   r   basenamer   ry   r   )rA   Zexport_headersr   r   Ztranslated_headersrD   Z
leave_nameZverbose_namesr@   r   attrheaderZtemp_headerrH   )r   rI   get_headers_translation   sZ    



z,YearlySummaryViewSet.get_headers_translation)rc   rd   re   r   rf   Zobjectsrx   Zselect_relatedr{   r   Zfilter_classr   r   rl   rn   ro   rr   r   r   rk   r   ri   rH   rH   )rG   rI   rj   H   s   
1rj   )0ZdatetimeZdjango.db.modelsr   r   r   r   r   r   r   r	   Zdjango.utils.translationr
   rh   r   Zrest_frameworkr   r   Zrest_framework.responser   Zrest_framework.exceptionsr   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.api.report_export_dictr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinrj   rH   rH   rH   rI   <module>   s    (3