B
    cC                 @   s   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 d	lmZ d d
lmZmZmZmZmZ d dlmZ d dlmZmZmZmZm Z  d dl!m"Z" d dl#m$Z$m%Z% G dd deZ&G dd deZ'dS )    )datetime)OrderedDict)gettext_lazyactivate)Response)action)status)serializers)DailyAttendanceReportViewSetDailyAttendanceSerializer)Transaction)temperature_updateget_real_colorget_mask_valueget_item_name_and_symbolget_item_symbols)PayloadBase)QCaseWhenValue	TextField)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc               @   s   e Zd Ze ZejeddddZej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d
dZG dd dZdS )DailyDetailsReportSerializerZreport_column_clockInTimeZget_clock_in_displayT)labelsource
allow_nullZreport_column_clockOutTimeZget_clock_out_display)r   r   Zreport_column_attendance_statusattendance_status_ )r   r   r   defaultc               @   s   e Zd ZeZdZdS )z!DailyDetailsReportSerializer.Meta)4emp_idZuuidZemp_codeZ
first_name	last_nameZ	nick_nameZgender	dept_codeZ	dept_nameZposition_codeZposition_nameatt_dateZweekdayZatt_exceptionZ	timetableZcheck_inZ	check_outclock_in	clock_outZ
total_timeZduty_wtZ	actual_wtZunscheduledZtotal_workedZdurationZduty_durationZ	break_outZbreak_inZbreak_durationZactual_breakZtaken_breakZ
break_lateZbreak_earlyZbreak_absentZlateZearly_leaveabsentZwork_dayZ	remainingZleaveZ	normal_wtZ	normal_otZ
weekend_otZ
holiday_otZot_lv1Zot_lv2Zot_lv3attendance_statusZ	punch_setZtotal_otclock_in_oldclock_out_oldN)__name__
__module____qualname__r   ZmodelZfields r/   r/   FG:\easytimepro\master/mysite/att\api\views\view_report_dailydetails.pyMeta"   s   r1   N)r,   r-   r.   r	   Z	CharFieldr"   _r*   r+   r&   r'   r)   r1   r/   r/   r/   r0   r      s   
r   c                   s   e Zd ZeedZdd ZdddgZededed	d
Z fddZ	dd Z
dd Zdd Zedgdddd Zdd Zdd Zdd Zd#dd Zd$d!d"Z  ZS )%DailyDetailsReportViewSet)listexportc             C   s   t d tdS )NZenZdaily_details_report)r   r2   )selfr/   r/   r0   get_file_title5   s    z(DailyDetailsReportViewSet.get_file_titlein_tempout_tempdisplayed_maskZreport_column_in_tempZreport_column_out_tempZreport_column_displayed_mask)r8   r9   r:   c                s   t t|  }| jjj}| jjjs|j|d}| jjjs| jjj	}| jjj
}i }| rd| |d< | rx| |d< |r|jf |}| }tt|d}|dkr|ttdtd dB ttdB }|S )N)Zemp__company_idZemp__department__inZemp__area__in
resign_emp0)Zemp__status)superr3   get_querysetrequestusercurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaexistsallZdistinctstrr   getr   r   r   )r6   queryset
company_idZ	auth_deptZ	auth_areafiltersr;   )	__class__r/   r0   r>   @   s(    




 z&DailyDetailsReportViewSet.get_querysetc             C   s*  x"|D ]}|d rt jj|d |d d}| r|d }|j}|j}|j}t||}t||}	t	||}
||d< |	|d< |
|d< |d rt jj|d |d d}| r|d }|j}|j}|j}t||}t||}t	||}
||d	< ||d
< |
dd dkrd|d< q|
dkr|
|d< qW |S )Nr&   r"   )r"   Z
punch_timer   r8   in_temp_colorr:   r'   r9   out_temp_colorNoYes)r   ZobjectsrB   rC   rH   Ztemperature	mask_flagr   r   r   rF   )r6   Z	base_datadataZtrans_inZtran_inrH   Z
celsius_inrO   r8   Zin_time_colorr:   Z	trans_outZtran_outZcelsius_outr9   Zout_time_colorr/   r/   r0   update_td_md_dataV   s>    






z+DailyDetailsReportViewSet.update_td_md_datac             C   s  | j jj}| j}dttdddttd||dtdddttd||dtddtd	d
tdttd||dtdttd||dtdttd||dtdtd	dtdtd	dtdttd||dtdttd||dtdttd||dtdttd||dtddttd||dtddttd||dt di}|j	f |}x\|D ]T}|j
d	kr\t|jj|jj|jjd}t|j||| j}|ptd || j|_
q\W |S )!Nr      FZ	holiday_p)day_offclock_in__isnullclock_out__isnullthen   Zweekdayoff_pr   Zget_attendance_status)rS   	leave__gtrV      rS   )rS   rV   ZweekendZholiday)half_dayrV   )rX   rV   r(   )Z
absent__gtrV   Zlate_in)Zlate__gtrV   Z	early_out)Zearly_leave__gtrV   Zpresent)Zduty_worked__gtrV   TZmiss_in)rT   rU   rV   Zmiss_out)Zoutput_field)yearmonthdayrZ   )r?   r@   rA   file_formatr   r   r   r   r   Zannotater   r   r%   r[   r\   r]   r   r"   )r6   rG   rH   r^   valuesrP   r%   Zattendance_symbolr/   r/   r0   annotate_querysetw   s:    



z+DailyDetailsReportViewSet.annotate_querysetc             O   sj   |  |  }| |}| |}|d k	rR| j|dd}|j}| |}| |S | j|dd}t|jS )NT)many)	Zfilter_querysetr>   r`   paginate_querysetget_serializerrP   rQ   Zget_paginated_responser   )r6   r?   argskwargsrG   page
serializerrP   r/   r/   r0   r4      s    



zDailyDetailsReportViewSet.listrF   F)methodsZdetailc             C   s  |j dd }|j ddd| _|j dd | _|j dd| _|j dd| _|j d	d| _|j d
d| _|j dd| _	|j dd}|| _
|  }| |}|d k	r| |}| j|dd}n| j|dd}|j dd}|j}| |}t|r|d  ng }	g }
x0| jD ]&}||	ks8|| jkr|
| qW |	rT|
| _|dkrn| | j|}nd|dkr| || j|}nH|dkr| | j|}n.|dkr| | j|}nttdgtjd}|S )Nrf   export_headersr    ,Zexport_style	page_wiseF
start_dateend_datezpdf-page-sizeorientationexport_typeT)ra   r   ZcsvZxlsZtxtZpdf)ro   zInvalid file format)r   )Zquery_paramsrF   splitri   Zgroup_byrk   rl   rm   Zpdf_page_sizern   r^   Zget_export_querysetr`   rb   rc   rP   rQ   lenkeysexport_headers_proappendZexport_to_csvZexport_to_xlsZexport_to_txtZexport_to_pdfr   r   r   ZHTTP_403_FORBIDDEN)r6   r?   rf   r^   rG   Z	page_datarg   rP   Zserializer_dataZdata_fieldsZheaders_listheaderZresponser/   r/   r0   r5      sH    






z DailyDetailsReportViewSet.exportc             C   s   | dd |S )Nr   zNo.)insert)r6   headersr/   r/   r0   update_export_headers   s    z/DailyDetailsReportViewSet.update_export_headersc             C   s   |r| d | d |S )NrK   rL   )rt   )r6   ri   group_by_fieldr/   r/   r0   update_header_before_export   s    

z5DailyDetailsReportViewSet.update_header_before_exportc             C   s$   |dkr| dd |d= |d= |S )Nr$   r   zNo.)rv   )r6   rw   ry   r/   r/   r0   update_group_export_headers   s
    z5DailyDetailsReportViewSet.update_group_export_headersNc             C   s  xt |D ]\}}y| jd}W n   d}Y nX |rPd||  d ||< y| jd}W n   d}Y nX |r|| rd|| d  d t||  d ||< y| jd	}W n   d}Y nX |r|| rd|| d
  d t||  d ||< y| jd}	W n   d}	Y nX |	r\||	 r\||	 }
|
dkrJd||	< n|
dkr\d||	< t|trz|d|d  qt|}|dd |||< qW |S )z"only use for att report pdf reportr%   Nz<span class="att_date">z</span>r8   z<span style="color:rK   z;">r9   rL   r:   rN   z(<span style="color: #00CD66;">Yes</span>rM   z'<span style="color: #ff0000;">No</span>r   rY   r    )	enumerateri   indexrE   
isinstancer4   rv   )r6   datasri   
extra_datairP   att_date_indexin_temp_indexout_temp_indexdisplayed_mask_indexr   r/   r/   r0   update_data_list   sF    

(
(



z*DailyDetailsReportViewSet.update_data_listc             C   s0  x(|D ]}xt |D ]\}}y| jd}W n   d}Y nX |rht|trhd||  d ||< y| jd}| jd}	W n   d }}	Y nX |r|| rd||	  d t||  d ||< y| jd	}
| jd
}W n   d }
}Y nX |
r0||
 r0d||  d t||
  d ||
< y| jd}W n   d}Y nX |r|| r|| }|dkr~d||< n|dkrd||< y|d= |d= W n@ tk
r } z td |dd }|||< W dd}~X Y nX |dkrt|tr|d|d  qt|}|dd |||< qW qW |S )z"only use for att report pdf reportr%   Nz<span class="att_date">z</span>r8   rK   z<span style="color:z;">r9   rL   r:   rN   z(<span style="color: #00CD66;">Yes</span>rM   z'<span style="color: #ff0000;">No</span>r{   zit is sum field nowr   r$   rY   r    )	r}   ri   r~   r   r4   rE   	TypeErrorprintrv   )r6   r   ry   r   rP   r   vr   r   Zin_temp_color_indexr   Zout_temp_color_indexr   r   er/   r/   r0   update_group_data_list  s\    
$$




z0DailyDetailsReportViewSet.update_group_data_list)N)N)r,   r-   r.   r   Zserializer_dictr7   rs   r2   Zextra_headers_translation_dictr>   rQ   r`   r4   r   r5   rx   rz   r|   r   r   __classcell__r/   r/   )rJ   r0   r3   /   s"   
!"+	
1r3   N)(r   collectionsr   Zdjango.utils.translationr   r2   r   Zrest_framework.responser   Zrest_framework.decoratorsr   Zrest_frameworkr   r	   Z0mysite.att.api.views.view_report_dailyattendancer
   r   Zmysite.iclock.modelsr   Zmysite.att.utilsr   r   r   r   r   Zmysite.att.modelsr   Zdjango.db.modelsr   r   r   r   r   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   r   r3   r/   r/   r/   r0   <module>   s   