B
    LcU                 @   s2  d dl Z d dl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 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 d dlmZmZ G dd dej Z!G dd de
j"eZ#dd Z$d$ddZ%d%ddZ&d&ddZ'dd Z(dd Z)dd Z*d d! Z+d'd"d#Z,dS )(    N)APIException)gettext_lazyactivate)mixinsserializers)Response)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)get_item_symbols)CHOICE_GENDER)Q)
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ddZejdddZejdddZejdddZejdddZejdddZejdddZejdddZejd ddZejd!ddZejd"ddZ fd#d$Zd%d& ZG d'd( d(Z  ZS )) MonthlyDetailedSummarySerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r   r   
allow_nullZreport_column_lastNameemp__last_nameZemp_field_localizedName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	Type\Dateget_data_typesum_total_worked)r   r   sum_total_otsum_present_timessum_absent_timessum_weekendsum_holidaysum_latesum_late_times	sum_earlysum_early_timesc                sL   | d}tt| j|| x*|jD ] \}}}tj||dd| j|< q$W d S )NviewT)r   r   r   )popsuperr   __init__date_periodr   	CharFieldfields)selfargskwargsr)   r   Zfiledr   )	__class__ PG:\easytimepro\master/mysite/att\api\views\view_report_monthlydetailedsummary.pyr,   0   s
    
z)MonthlyDetailedSummarySerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r0   objr4   r4   r5   
get_gender7   s    z+MonthlyDetailedSummarySerializer.get_genderc               @   s   e Zd ZeZdZdS )z%MonthlyDetailedSummarySerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_name	data_typecal_total_workedcal_total_otcal_present_timescal_absent_timescal_weekendcal_holidaycal_latecal_late_times	cal_earlycal_early_timesatt_dateN)__name__
__module____qualname__r   modelr/   r4   r4   r4   r5   Meta:   s   rT   ) rP   rQ   rR   r   r.   _r;   r<   r=   r>   ZSerializerMethodFieldr?   r@   rA   rB   rC   rD   rE   rF   ZIntegerFieldrG   rH   rI   rJ   rK   rL   rM   rN   r,   r:   rT   __classcell__r4   r4   )r3   r5   r      s8   r   c                   s   e Zd ZeZej  ddZ	e
ZeedZdZdgZi Zdd Zddd	Zd
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dd Z  ZS )MonthlyDetailedSummaryViewSetemp_idrO   )listZexportNrD   c             C   sz   t |}t|}t|}t|
}
||||||||	|
|d
}d}x6|dkrtx | D ]\}}||| |< qRW |d8 }q@W |S )N)
r   r    r!   r"   r#   r$   r%   r&   r'   r(   i   )get_total_displayget_total_ot_displayget_late_displayget_early_leave_displayitems)r0   result_datatotal_workedtotal_otpresent_timesabsent_timesweekendholidaylate
late_timesearlyearly_timesZ	cal_fieldikvr4   r4   r5   cal_old_sum_fieldsQ   s    
z0MonthlyDetailedSummaryViewSet.cal_old_sum_fieldsc              C   s  | j }| jjj}g }d}d } } }	 }
 } } } } }}t|}xt|D ]\}}|d }|d |krd|dkr| ||||	|
|||||| |d }d } } }	 }
 } } } } }}| }| }| }| }| }| }| }| }d|d< d|d< d|d< d	|d< d
|d< d|d< d|d< d|d< |||||||||f t	|d }t
|d |d |d |d |d |d |d |d |d | jjj|d |d |d|d |< tj|d j|d j|d jd}t||||}|d k	r||d |< t|d |d |d d|d |< t|d |d |d d|d |< t|d |d |d d|d |< t|d |d  |< t|d |d! |< t|d" |d# |< t|d$ |d%|d& |< ||d 7 }||d" r|d" nd7 }|	|d dkrd'nd7 }	|
|d dkr(d'nd7 }
||d rPt|d d(krPd'nd7 }||d rxt|d d)krxd'nd7 }||d dkr|d nd7 }||d dkrd'nd7 }||d r|d nd7 }||d rd'nd7 }|d' |krT| ||||	|
|||||| qTW |S )*N r   rX   r   ZStatusr   zClock Inz	Clock OutzTotal WKZLateZEarlyZOTZ	TimetablerO   day_offduty_workedearly_leaverh   absentleavehalf_dayclock_in	clock_outi)old_datafile_format)yearmonthdayi)ry   irb   overtime__total_ot	timetable)	is_exportrZ   r[   23)rz   requestusercurrent_companylen	enumeratero   copyextendatt_date_formatget_status_displayr8   datetimer{   r|   r}   r   get_clock_displayr\   r^   r_   r]   get_timetable_displaystr) r0   Zdatasr   rz   
company_idra   Ztemp_emp_coderb   rc   rd   re   rf   rg   rh   ri   rj   rk   Zdata_lenindexrn   rX   Ztotal_detailsZclock_in_detailsZstatus_detailsZclock_out_detailsZlate_detailsZearly_detailsZ
ot_detailsZtimetable_detailsZ
cur_v_dataZ	data_dateZ	data_dictr4   r4   r5   update_daily_datasa   s    
(("
((z0MonthlyDetailedSummaryViewSet.update_daily_datasc             C   s   |   }| j| | |  ddddddddd	d
dddddddddddddddddd}|   | jt	|dd}|S )NrX   r   r   r   r   r6   r   r   r   r   rO   rw   rx   rb   rq   rr   rs   rh   rt   ru   rv   r   r   durationwork_dayemp__department_idT)r   )
generate_time_mapextra_headers_translation_dictupdatefilter_querysetget_querysetvaluesorder_byupdate_date_periodr   rY   )r0   time_mapquerysetr4   r4   r5   get_export_queryset   s     

z1MonthlyDetailedSummaryViewSet.get_export_querysetc             O   s   |  |  ddddddddd	d
dddddddddddddddddd}|   | t|}| |}|d k	r| j|dd}| 	|j
S | j|dd}t|j
S )NrX   r   r   r   r   r6   r   r   r   r   rO   rw   rx   rb   rq   rr   rs   rh   rt   ru   rv   r   r   r   r   r   T)Zmany)r   r   r   r   r   r   rY   Zpaginate_querysetget_serializerZget_paginated_responsedatar   )r0   r   r1   r2   r   ZpageZ
serializerr4   r4   r5   rY      s*    

z"MonthlyDetailedSummaryViewSet.listc             C   s   | j jdd }| j jdd }g }|r|rtd}tj|d|d d d}tj|d|d d d}x>||kr||	d|	d|	d	f |tj
d
d7 }qtW || _d S )N
start_dateend_datez[-:\s]rp      z%Y%m%dz%Y/%m/%dz%m/%dz%dr[   )days)r   GETr8   recompiler   strptimesubappendstrftimeZ	timedeltar-   )r0   r   r   r-   patternr4   r4   r5   r      s    

z0MonthlyDetailedSummaryViewSet.update_date_periodc                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+   rW   r   r   r   r   Zis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctr   r   r8   r   r   r   	Exceptionr   )r0   r   r   Zbase_filterZ	auth_deptZ	auth_areaZauth_posr   )r3   r4   r5   r      s.    





$z*MonthlyDetailedSummaryViewSet.get_querysetc                s   | |d< t t| j||S )Nr)   )r+   rW   r   )r0   r1   r2   )r3   r4   r5   r      s    z,MonthlyDetailedSummaryViewSet.get_serializerc             C   s   | j | jtS )N)serializer_dictr8   actionr   )r0   r4   r4   r5   get_serializer_class  s    z2MonthlyDetailedSummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenz$Monthly Status Report(Work Detailed))r   rU   )r0   r4   r4   r5   get_file_title  s    z,MonthlyDetailedSummaryViewSet.get_file_titlec          	   C   s   | j s
d S d }| j dkr(d| _d| _d}| j dkrBd| _d| _d}| j d	kr\d
| _d| _d}|r| jrx4| jD ]*}y| j| W qn tk
r   Y qnX qnW |S )N1)	r;   r<   r=   r>   r?   r@   rA   rB   rC   a  Employee Name: {first_name} {last_name}, Employee ID: {emp_code}, 
                Department: {dept_name}, Position Code: {position_code}, Position Name: {position_name}, 
                Total WK: {cal_total_worked}, Total OT: {cal_total_ot}, Present: {cal_present_times}, 
                Absent: {cal_absent_times}, Weekend: {cal_weekend}, Holiday: {cal_holiday}, Late: {cal_late}, 
                Late Times: {cal_late_times}, Early: {cal_early}, Early Times: {cal_early_times}r;   r   )r@   rA   z#Department: {dept_name} {dept_code}r@   r   )rO   z
{att_date}rO   )Zgroup_byZgroup_fieldsZgroup_titleZexport_headersremover   )r0   Zgroup_by_fieldxr4   r4   r5   get_group_by_field  s.    




z0MonthlyDetailedSummaryViewSet.get_group_by_fieldc             C   s   dddddddg}i }| j jdd }|d	\}}}tt|t|d
 }xbt|D ]V}tt|t||d
 }	|	dd t
|d
 	d }
d|d
 ||	 f ||
< qXW |S )NMTWZThFZStSr   -r[      /z%s %s)r   r   r8   splitcalendarZ
monthrangeintrangeZweekdayzfillr   )r0   Zsym_weekr   r   ymrU   r   rl   Zwofrm   r4   r4   r5   r   ,  s     z/MonthlyDetailedSummaryViewSet.generate_time_map)N)rP   rQ   rR   r   rS   objectsr   Zselect_relatedr   r   r
   Zfilter_classr   r   r-   Zexport_headers_pror   ro   r   r   rY   r   r   r   r   r   r   rV   r4   r4   )r3   r5   rW   D   s&   
L!rW   c             C   s   |  d}|S )Nz%Y/%m/%d)r   )rO   resultr4   r4   r5   r   :  s    
r   c             C   s0   | rt t| | pddnd}|s$|S |d | S )Nr   r   rp   z, )r   
deal_param)totalry   r   r4   r4   r5   r\   ?  s    r\   c             C   s0   ddl m} | r|| nd}|s$|S |d | S )Nr   )short_time_formatrp   z, )mysite.att.utilsr   )clockry   r   r   r4   r4   r5   r   D  s    r   c             C   s  ddl m} d}dddd}|t| d} | rN|d krN|d krN|| |	|}n|dkrd|d|	|}n|r~|dkr~|d	|	|}n|r|dkr|d
|	|}n|r|dkr|d|	|}nv|r|dkr|d|	|}n\|r|dkr|d|	|}nB|d kr|d k	r|d|	|}n |d k	r(|d kr(|d|	|}| dkrL|rL|rL|d|	|}n"| dkrn|rn|rn|d|	|}|
sx|S |
d | S )Nr   )get_item_symbolrp   rq   rf   rg   )r   r   r   rv   Zpresent	early_outlate_inrt   ru   Zmiss_inZmiss_outZweekdayoff_pZ	holiday_pz, )r   r   r8   r   )rq   rr   rs   rh   rt   ru   rv   rw   rx   r   ry   rz   r   r   Zday_off_dictr4   r4   r5   r   J  s:    r   c             C   s   ddl m} |||| ddS )Nr   )value_format)r   )r   r   )r   valkeyr   r4   r4   r5   r   m  s    r   c             C   s   | sdS t | | pddS )Nrp   r   r   )r   )rh   r4   r4   r5   r^   r  s    r^   c             C   s   | sdS t | | pddS )Nrp   r   r   )r   )rs   r4   r4   r5   r_   x  s    r_   c             C   s   | sdS t | | pddS )Nrp   r   Zovertime)r   )rc   r4   r4   r5   r]   ~  s    r]   c       	      C   s   ddl m} ddlm} | s dS |r2dj| d}ndj| d}||d }|syt|jj| dj}|rd}d}x0|D ](}|d7 }||7 }|d	krrd}|d
7 }qrW t|d dkr|dd }n|}W n   d}Y nX |	||d |S )Nr   )cache)TimeIntervalrp   ztimatable_export_{id})idztimatable_list_{id}r[      
   rZ   <   )
Zdjango.core.cacher   mysite.att.modelsr   formatr8   r   aliasr   set)	r   r   r   r   rm   Ztimetable_namerl   Zname_tmpnamer4   r4   r5   r     s6    

r   )N)N)NN)N)-r   r   r   Zrest_framework.exceptionsr   Zdjango.utils.translationr   rU   r   Zrest_frameworkr   r   Zrest_framework.responser   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr	   r
   r   r   r   r   Zmysite.personnel.db_constr   Zdjango.db.modelsr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinrW   r   r\   r   r   r   r^   r_   r]   r   r4   r4   r4   r5   <module>   s4   / w


"