B
    ?c4A                 @   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 d d	lmZ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 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 )    )OrderedDict)gettext_lazy)mixinsserializers)Response)action)status)datetime)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)Transaction)temperature_updateget_real_colorget_mask_valueSHORT_DATE_FORMATget_current_company_id)Q)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc               @   s
  e Zd Ze 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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ZejedddZejedddZG dd dZdS )BaseTemperatureReportSerializerZreport_column_empCodezemp.emp_code)labelsourceZreport_column_firstNamezemp.first_nameT)r   r   
allow_nullZreport_column_lastNamezemp.last_nameZreport_column_nickNamezemp.nicknameZreport_column_genderzemp.get_gender_displayZreport_column_departmentCodezemp.department.dept_codeZreport_column_departmentNamezemp.department.dept_nameZreport_column_positionCodezemp.position.position_codeZreport_column_positionNamezemp.position.position_nameZreport_column_attendanceDateZget_att_date_displayZreport_column_clockInTime)r   r   Zreport_column_clockOutTimec               @   s   e Zd ZeZdZdS )z$BaseTemperatureReportSerializer.Meta)Zuuidemp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_nameatt_dateclock_in	clock_outemp_idN)__name__
__module____qualname__r   modelZfields r-   r-   IG:\easytimepro\master/mysite/att\api\views\view_report_basetemperature.pyMeta+   s   r/   N)r)   r*   r+   r   Z	CharFieldr(   _r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r/   r-   r-   r-   r.   r      s(   r   c                   s   e Zd ZeZej  ddZ	e
Zee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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d!d" Z  ZS )%BaseTemperatureReportViewSetr(   r%   )listexportin_tempout_tempdisplayed_maskZreport_column_in_tempZreport_column_out_tempZreport_column_displayed_mask)r4   r5   r6   c                s   t t|  }| jjj}| jjjs|j| jjjd}| jjjs| jjj	}| jjj
}| jjj}i }| rt| |d< | r| |d< | r| |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__inZemp__position__in
resign_emp0)Zemp__status)superr1   get_querysetrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   getr   r   r   )selfqueryset
company_idZ	auth_deptZ	auth_areaZauth_posfiltersr7   )	__class__r-   r.   r:   C   s.    





 z)BaseTemperatureReportViewSet.get_querysetc          	   C   s  ddl m} t }t|}|dd}tt| }x|D ]}|d }|d }	yt|	|	 }	W n t
k
r   |d Y nX tjj|d|	dd	d
d}
|
 r|
d d }|
d d }||d< t|||d< tjj|d|	ddd
d}| r2|d d }|d d }||d< t|||d< d}tjj|d|	dd	d}| rx6|D ].}|d dkr~d}P n|d dkrdd}qdW tjj|d|	ddd}| rx6|D ].}|d dkrd}P n|d dkrd}qW ||d< q<W |S )Nr   )AdminRuntimeWarning
short_date   r(   r%   Z(this_is_the_incorrect_date_string_format)r(   Zpunch_stateZpunch_time__dateZ
punch_timeZtemperaturerD   r4   in_temp_colorz-punch_timer5   out_temp_color Z	mask_flagNoYesr6   )Zmysite.admin.exceptionsrG   r   r   rA   r   r@   r	   strptimedate
ValueErrorr   objectsr=   order_byZvalues_listr>   r   )rB   Z	base_datarG   rD   Zreport_settingrH   Z_formatdatar(   r%   Zfirst_check_inZ	temp_dataZfirst_check_outZmask_flag_in_outcheck_ini	check_outr-   r-   r.   update_td_md_data\   sf    











z.BaseTemperatureReportViewSet.update_td_md_datac             O   s   |  |  }| |}x8|D ]0}|jr8|j|_|  |jr|j|_|  qW |d k	r| j|dd}|j	}| 
|}| |S | j|dd}t|j	S )NT)many)Zfilter_querysetr:   paginate_querysetrU   r&   ZsaverW   r'   get_serializerrT   rX   Zget_paginated_responser   )rB   r;   argskwargsrC   pagerT   
serializerr-   r-   r.   r2      s     



z!BaseTemperatureReportViewSet.listrA   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| _	| 
 }|d k	r| |}| j|dd}n| j|dd}|j dd}|j}| |}|dkr^| |}xn|D ]f}	d|	kr
d|	d< |	d dkr"d|	d< q|	d dkr:d|	d< q|	d dkrRd|	d< qd|	d< qW t|rt|d  ng }
g }x0| jD ]&}||
ks|| jkr|| qW |
r|| _|dkr| | 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 )Nr^   export_headersrL   ,Zexport_style	page_wiseF
start_dateend_datezpdf-page-sizeorientationT)rY   export_type)xlstxtcsvr    r8   ZNormal1Warning2ZHighr   rj   rh   ri   Zpdf)rg   zInvalid file format)r   )Zquery_paramsrA   splitra   Zgroup_byrc   rd   re   Zpdf_page_sizerf   Zget_export_querysetrZ   r[   rT   rX   lenkeysexport_headers_proappendZexport_to_csvZexport_to_xlsZexport_to_txtZexport_to_pdfr   r   r   ZHTTP_403_FORBIDDEN)rB   r;   r^   rC   Z	page_datar_   Zfile_formatrT   Zserializer_datadatasZdata_fieldsZheaders_listheaderZresponser-   r-   r.   r3      sZ    












z#BaseTemperatureReportViewSet.exportc             C   s   | dd |S )Nr   zNo.)insert)rB   headersr-   r-   r.   update_export_headers   s    z2BaseTemperatureReportViewSet.update_export_headersc             C   s   |r| d | d |S )NrJ   rK   )rs   )rB   ra   group_by_fieldr-   r-   r.   update_header_before_export   s    

z8BaseTemperatureReportViewSet.update_header_before_exportc             C   s$   |dkr| dd |d= |d= |S )Nr!   r   zNo.)rv   )rB   rw   ry   r-   r-   r.   update_group_export_headers   s
    z8BaseTemperatureReportViewSet.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>r4   z<span style="color:rJ   z;">r5   rK   r6   rN   z(<span style="color: #00CD66;">Yes</span>rM   z'<span style="color: #ff0000;">No</span>r   rI   rL   )	enumeratera   indexr@   
isinstancer2   rv   )rB   rt   ra   
extra_datarV   rT   att_date_indexin_temp_indexout_temp_indexdisplayed_mask_indexr   r-   r-   r.   update_data_list   sF    

(
(



z-BaseTemperatureReportViewSet.update_data_listc             C   s  x|D ]}xt |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||< |d= |d= |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>r4   rJ   z<span style="color:z;">r5   rK   r6   rN   z(<span style="color: #00CD66;">Yes</span>rM   z'<span style="color: #ff0000;">No</span>r{   r!   r   rI   rL   )r}   ra   r~   r   r2   r@   rv   )rB   rt   ry   r   rT   rV   vr   r   Zin_temp_color_indexr   Zout_temp_color_indexr   r   r-   r-   r.   update_group_data_list#  sR    
$$



z3BaseTemperatureReportViewSet.update_group_data_listc             C   s   | j | jtS )N)serializer_dictrA   r   r
   )rB   r-   r-   r.   get_serializer_classY  s    z1BaseTemperatureReportViewSet.get_serializer_class)N)N)r)   r*   r+   r   r,   rR   r:   Zselect_relatedrS   rC   r   Zfilter_classr   r   rr   r0   Zextra_headers_translation_dictrX   r2   r   r3   rx   rz   r|   r   r   r   __classcell__r-   r-   )rF   r.   r1   3   s&   
<5	
/
6r1   N)(collectionsr   Zdjango.utils.translationr   r0   Zrest_frameworkr   r   Zrest_framework.responser   Zrest_framework.decoratorsr   r   r	   Zmysite.att.api.serializersr
   Zmysite.att.api.utils_classr   r   Zmysite.att.modelsr   Zmysite.iclock.modelsr   Zmysite.att.utilsr   r   r   r   r   Zdjango.db.modelsr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinr1   r-   r-   r-   r.   <module>   s    