B
    ?bB                 @   s  d dl Z d dlZd dlmZ d dl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 d dlmZ d d	lmZm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 m!Z! d dl"m#Z# d dlmZ d dl$m%Z% G dd dej&Z'G dd deZ(G dd dej)eZ*dS )    N)Decimal)Q)	TruncDate)gettext_lazyactivate)	FilterSet)mixinsserializers)Response)STATUS_VALIDSTATUS_RESIGN_PENDING)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)short_date_formatshort_time_format)TransactionTerminalWorkCode)get_system_setting)
C_ATT_RULEc               @   s  e Z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dZejeddZejeddZejeddZejeddZejedddZejedddZejeddZejed dZejed!dZejed"dZe Ze Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Z d-d. Z!d/d0 Z"d1d2 Z#d3d4 Z$d5d6 Z%d7d8 Z&G d9d: d:Z'd;S )<TransactionReportSerializerZreport_column_empCodezemp.emp_codeT)labelsourceZ
allow_nullZreport_column_firstNamezemp.first_nameZ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_punchDate)r   Zreport_column_punchTimeZreport_column_punchStateZreport_column_workCodeAliasZreport_column_verifyTypeZget_verify_type_display)r   r   Zreport_column_dataSourcesZget_source_displayZreport_column_displayed_tempZreport_column_displayed_maskZreport_column_high_temp_colorZreport_column_warn_temp_colorc             C   s"   ddl m} |j}|||j}|S )zTD/MD
        Display in report the status for mask
        mask_flag: user have mask mask or not when punch
        mask_enable: enable mask display with color or not in setting
        return: 1-green yes; 2-red no; 3-black yes; 4-black yes
        r   )get_mask_value)mysite.att.utilsr   	mask_flag
company_id)selfobjr   r   result r    EG:\easytimepro\master/mysite/att\api\views\view_report_transaction.pyget_displayed_maskE   s    z.TransactionReportSerializer.get_displayed_maskc             C   s"   ddl m} |j}|||j}|S )ziTD/MD
        Check the real temp and max/min in setting to judge display high temp color or not
        r   )check_use_high_temp)r   r#   temperaturer   )r   r   r#   celsiusr   r    r    r!   get_check_display_high_tempQ   s    z7TransactionReportSerializer.get_check_display_high_tempc             C   s"   ddl m} |j}|||j}|S )ziTD/MD
        Check the real temp and max/min in setting to judge display warn temp color or not
        r   )check_use_warn_temp)r   r'   r$   r   )r   r   r'   r%   r   r    r    r!   get_check_display_warn_tempZ   s    z7TransactionReportSerializer.get_check_display_warn_tempc             C   s"   ddl m} |j}|||j}|S )z TD/MD
        The result depend on temperature unit use fahrenheit or celsius
        :param obj: Transaction obj
        :return: value of temp for display in report
        r   )temperature_update)r   r)   r$   r   )r   r   r)   r%   r   r    r    r!   get_displayed_tempc   s    z.TransactionReportSerializer.get_displayed_tempc             C   s&   d}t ||jd}|r|d nd}|S )zTD/MD
        Get the color for  high temp to display in report
        :param obj: Transaction obj
        :return: color, like '#ff0000'
        temp_mask_setting)r   high_temp_colorN)r   r   )r   r   setting_namer+   tem_unitr    r    r!   get_high_temp_colorn   s    z/TransactionReportSerializer.get_high_temp_colorc             C   s&   d}t ||jd}|r|d nd}|S )zTD/MD
        Get the color for  warning temp to display in report
        :param obj: Transaction obj
        :return: color, like '#ff0000'
        r+   )r   warn_temp_colorN)r   r   )r   r   r-   r+   r.   r    r    r!   get_warn_temp_colory   s    z/TransactionReportSerializer.get_warn_temp_colorc             C   s   ddl m} y|| jd jjd}W n*   || jd jjjjd}Y nX x$|	 D ]}|d |kr`|d S q`W d S )Nr   )r   request	func_keysvaluename)
mysite.att.global_cacher   getcontextusercurrent_companyZ
departmentZcompanyidvalues)r   r4   r   r3   vr    r    r!   get_func_key   s    $z(TransactionReportSerializer.get_func_keyc             C   s   |  |jS )N)r>   punch_state)r   r   r    r    r!   get_punch_state   s    z+TransactionReportSerializer.get_punch_statec             C   s
   t |jS )N)r   date)r   r   r    r    r!   get_att_date   s    z(TransactionReportSerializer.get_att_datec             C   s
   t |jS )N)r   
punch_time)r   r   r    r    r!   get_punch_time   s    z*TransactionReportSerializer.get_punch_timec             C   s0   d}|j r,tjj|j |jd}|r,|d j}|S )N )coder   r   )	work_coder   objectsfilterr   alias)r   r   rJ   Z
work_codesr    r    r!   get_work_code_alias   s    
z/TransactionReportSerializer.get_work_code_aliasc               @   s   e Zd ZeZdZdS )z TransactionReportSerializer.Meta)r;   emp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_namerG   att_datework_code_aliasrC   r?   verify_typer   displayed_tempdisplayed_maskr,   r0   check_display_high_tempcheck_display_warn_tempN)__name__
__module____qualname__r   modelfieldsr    r    r    r!   Meta   s   ra   N)(r\   r]   r^   r	   Z	CharField_rL   rM   rN   rO   rP   rQ   rR   rS   rT   ZSerializerMethodFieldrU   rC   r?   rV   rW   r   rX   rY   r,   r0   rZ   r[   r"   r&   r(   r*   r/   r1   r>   r@   rB   rD   rK   ra   r    r    r    r!   r      sh   		
r   c               @   sZ   e Zd Zejr,ejdddZejdddZnejdddZejdddZG dd dZ	dS )	TransactionReportFilterrA   Zgte)Z
field_namelookup_exprZlte)r5   rd   c               @   s   e Zd ZeZdddddgZdS )zTransactionReportFilter.MetaZ	employeesZdepartmentsZareas
start_dateend_dateN)r\   r]   r^   r   r_   r`   r    r    r    r!   ra      s   ra   N)
r\   r]   r^   sixZPY3django_filtersZ
DateFilterre   rf   ra   r    r    r    r!   rc      s   rc   c                   s   e Zd ZeZej  dZ	e
ZeedZ fddZdd Zdd Zd	d
 Zdd Zdd Zdd ZdddZdddZ  ZS )TransactionReportViewSetz-punch_time)listZexportc       
         sj  d}d}| j s| jrd| j|kr4tt|  d}qr| j|krTtt|  d}qrtt|  }ntt|  }| jjjsV| jjj	}d|i}|j
f |}| jjjs| jjj}| jjj}| jjj}| r|j
| d}| r|j
| d }| r|j
| d}tt|d	}	|	d
krV|
ttdtd dB ttdB }|jtdd}|S )N13z-punch_timerL   Zemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statusrC   )rA   )Z	page_wiseZgroup_bysuperri   get_querysetorder_byr2   r9   Zis_employeer:   rI   Zis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r7   r   r   r   Zannotater   )
r   ZEMP_WISEZ	DATE_WISEquerysetr   Zbase_filterZ	auth_deptZ	auth_areaZauth_posrm   )	__class__r    r!   rp      s:    







 z%TransactionReportViewSet.get_querysetc             C   s   | j | jtS )N)serializer_dictr7   actionr   )r   r    r    r!   get_serializer_class   s    z-TransactionReportViewSet.get_serializer_classc             C   s   t d tdS )NZenZmenu_att_transactionReport)r   rb   )r   r    r    r!   get_file_title   s    z'TransactionReportViewSet.get_file_titlec             C   s   | dd |S )Nr   zNo.)insert)r   headersr    r    r!   update_export_headers   s    z.TransactionReportViewSet.update_export_headersc             C   s:   x4t |D ](\}}|d|d i |jddd q
W |S )NzNo.   F)Zlast)	enumerateupdatemove_to_end)r   datasidatar    r    r!   update_datas_before_export   s    z3TransactionReportViewSet.update_datas_before_exportc             C   s0   |r,| d | d | d | d |S )Nr,   r0   rZ   r[   )append)r   export_headersgroup_by_fieldr    r    r!   update_header_before_export   s    



z4TransactionReportViewSet.update_header_before_exportc             C   s0   |dkr| dd |d= |d= |d= |d= |S )NrQ   r   zNo.)r{   )r   r|   r   r    r    r!   update_group_export_headers   s    z4TransactionReportViewSet.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|| r|| d }|| d }	|| d }
|| d	 }|
r|rd
| d t||  d ||< n,|r|	rd
|	 d t||  d ||< y| jd}W n   d}Y nX |rh|| rh|| }|dkrVd||< n|dkrhd||< t|tr|d|d  qt|}|dd |||< qW |S )z"only use for att report pdf reportrU   Nz<span class="att_date">z</span>rX   r,   r0   rZ   r[   z<span style="color:z;">rY   Yesz(<span style="color: #00CD66;">Yes</span>Noz'<span style="color: #ff0000;">No</span>r   r~   rE   )r   r   indexrt   
isinstancerj   r{   )r   r   r   
extra_datar   r   att_date_indexdisplayed_temp_indexr,   r0   rZ   r[   displayed_mask_indexstatusr    r    r!   update_data_list  sH    

" 



z)TransactionReportViewSet.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}W n   d}Y nX |r<|| r<| jd}	| jd}
| jd}| jd	}|| r||	 rd
||	  d t||  d ||< n8|| r<||
 r<d
||
  d t||  d ||< y| jd}W n   d}Y nX |r|| r|| }|dkrd||< n|dkrd||< |d= |d= |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 reportrU   Nz<span class="att_date">z</span>rX   r,   r0   rZ   r[   z<span style="color:z;">rY   r   z(<span style="color: #00CD66;">Yes</span>r   z'<span style="color: #ff0000;">No</span>r   rQ   r   r~   rE   )r   r   r   r   rj   rt   r{   )r   r   r   r   r   r   r=   r   r   Zhigh_temp_color_indexZwarn_temp_color_indexZcheck_display_high_temp_indexZcheck_display_warn_temp_indexr   r   r    r    r!   update_group_data_list4  sT    

&$



z/TransactionReportViewSet.update_group_data_list)N)N)r\   r]   r^   r   r_   rH   rp   Zselect_relatedrq   ru   rc   Zfilter_classr   rw   ry   rz   r}   r   r   r   r   r   __classcell__r    r    )rv   r!   ri      s   "	
.ri   )+collectionsrg   Zdecimalr   rh   Zdjango.db.modelsr   Zdjango.db.models.functionsr   Zdjango.utils.translationr   rb   r   Zdjango_filters.rest_frameworkr   Zrest_frameworkr   r	   Zrest_framework.responser
   Zmysite.admin.modelsr   r   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   r   r   r   Zmysite.iclock.modelsr   r   Zmysite.utilsr   r6   r   ZModelSerializerr   rc   ZListModelMixinri   r    r    r    r!   <module>   s*    