B
    b2                 @   s>  d dl Z d dlmZ d dlmZ d dlm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 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  d dl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Z-G dd dej.eZ/dS )    N)datetime)OrderedDict)APIException)	TruncDate)gettext_lazyactivate)mixinsserializers)Response)action)status)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)short_date_format)Transaction)
DepartmentEmployee)get_temp_statuscheck_use_high_tempcheck_use_warn_temp)Q)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc               @   sr   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Z
e	 Zd	d
 Zdd ZG dd dZdS )DeptWiseReportSerializerZreport_column_departmentCodeemp__department__dept_codeT)labelsourceZ
allow_nullZreport_column_departmentNameemp__department__dept_nameZreport_column_attendanceDate)r   c             C   s   | dd }|sdS t|S )N
punch_date )getr   )selfobjatt_date r&   GG:\easytimepro\master/mysite/att\api\views\view_report_tdmd_deptwise.pyget_att_date#   s    z%DeptWiseReportSerializer.get_att_datec             C   s   | dd S )Nr    )r"   )r#   r$   r&   r&   r'   get_punch_date)   s    z'DeptWiseReportSerializer.get_punch_datec               @   s   e Zd ZeZdZdS )zDeptWiseReportSerializer.Meta)	dept_code	dept_namer%   
company_idr    N)__name__
__module____qualname__r   modelfieldsr&   r&   r&   r'   Meta,   s   r2   N)r-   r.   r/   r	   Z	CharFieldr,   _r*   r+   ZSerializerMethodFieldr%   r    r(   r)   r2   r&   r&   r&   r'   r      s   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 )	TotalTempDetectionReportFilterr    Zgte)Z
field_namelookup_exprZlte)namer5   c               @   s   e Zd ZeZdddddgZdS )z#TotalTempDetectionReportFilter.MetaZ	employeesZdepartmentsZareas
start_dateend_dateN)r-   r.   r/   r   r0   r1   r&   r&   r&   r'   r2   ;   s   r2   N)
r-   r.   r/   sixZPY3django_filtersZ
DateFilterr7   r8   r2   r&   r&   r&   r'   r4   3   s   r4   c                   s   e Zd ZeZej  dZ	e
ZddddddgZeded	ed
edededdZee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dZd d! Zd"d# Z  ZS )%DeptWiseReportViewSetz-punch_time	emp_countnormal_temp_countabnormal_temp_countmasked_faceunmasked_facetotal_absentZreport_column_empCountZreport_column_normalTempCountZreport_column_abnormalTempCountZreport_column_maskedFaceZreport_column_unmaskedFaceZreport_column_totalAbsent)r<   r=   r>   r?   r@   rA   )listexportc                s  t t|  }| jjj}| jjjsd|i}|jf |}| jjjs| jjj	}| jjj
}| jjj}| rv|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 }|jtdd	}|d
ddddd }|S )NZemp__company_id)Zemp__department__in)Zemp__area__in)Zemp__position__in
resign_emp0)Zemp__statusZ
punch_time)r    r,   r   r   r    )superr;   get_querysetrequestuserZcurrent_companyZis_employeefilteris_superuserZget_auth_deptget_auth_areaZget_auth_posexistsallZdistinctstrr   r"   r   r   r   Zannotater   valuesorder_by)r#   querysetr,   Zbase_filterZ	auth_dept	auth_areaZauth_posrD   )	__class__r&   r'   rG   T   s2    





 z"DeptWiseReportViewSet.get_querysetc             C   s  x|D ]
}| dd r|d }|d }|d }tjj||d}| rR|d nd }t|dkrttjj||d}ntjj|d}| |d< d }	 }
 }}t	|tj
 }t	|tj }t|dkrtjj|j|||d	d
}ntjj|j||dd
}t }t }t }t }t }x|D ]}|j}t||}|rR||j n*t||}|rp||j n||j |jr||j n||j ||j || }|| }t|}
t|}	t|}t|}q*W |	|d< |
|d< ||d< ||d< | |
|	  |d< qW |S )Nr    r,   r*   )r,   r*   r   )
departmentZarea__area_name__in)rU   r<   )emp__department_idZarea_alias__inpunch_time__gtepunch_time__ltez-punch_time)rV   rW   rX   r=   r>   r?   r@   rA   )r"   r   objectsrJ   rM   lenr   countr   Zcombinemintimemaxr   idrQ   setZtemperaturer   addZemp_coder   Z	mask_flag)r#   Z	base_dataareadatar    r,   r*   Zdept_objZ	emp_queryZnormal_countr>   Zmasked_countZno_mask_countZpuch_time_startZpuch_time_endZtransZall_emp_code_setZnormal_emp_code_setZabnormal_emp_code_setZno_mask_emp_code_setZmasked_emp_code_setZtranZcelsiusZhigh_statusZwarn_statusr&   r&   r'   update_td_md_datap   sd    



z'DeptWiseReportViewSet.update_td_md_datac       
      O   s   |  |  }| |}|d k	r| j|dd}|j}g }yB| jjjsf|jj}	|		 rfdd |	
 D }| ||}| |S  tk
r   tdY nX | j|dd}t|jS )NT)manyc             S   s   g | ]}t |qS r&   )rO   ).0xr&   r&   r'   
<listcomp>   s    z.DeptWiseReportViewSet.list.<locals>.<listcomp>zPlease Check with Admin)Zfilter_querysetrG   paginate_querysetget_serializerrc   rH   rI   rK   rL   rM   rN   rd   Zget_paginated_response	Exceptionr   r
   )
r#   rH   argskwargsrR   page
serializerrc   rb   rS   r&   r&   r'   rB      s"    


zDeptWiseReportViewSet.listr"   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}g }| jjjs|jj}	|	 rdd |	 D }| ||}
t|
r&|
d  ng }g }x0| jD ]&}||ksP|| jkr6|| q6W |rl|| _|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 )Nrn   export_headersr!   ,Zexport_style	page_wiseFr7   r8   zpdf-page-sizeorientationT)re   export_typec             S   s   g | ]}t |qS r&   )rO   )rf   rg   r&   r&   r'   rh      s    z0DeptWiseReportViewSet.export.<locals>.<listcomp>r   ZcsvZxlsZtxtZpdf)ru   zInvalid file format)r   )!Zquery_paramsr"   splitrq   Zgroup_byrs   r7   r8   Zpdf_page_sizert   Zget_export_querysetri   rj   rc   rH   rI   rK   rL   rM   rN   rd   rZ   keysexport_headers_proappendZexport_to_csvZexport_to_xlsZexport_to_txtZexport_to_pdfr
   r   r   ZHTTP_403_FORBIDDEN)r#   rH   rn   rR   Z	page_dataro   Zfile_formatrc   rb   rS   Zserializer_dataZdata_fieldsZheaders_listheaderZresponser&   r&   r'   rC      sL    





zDeptWiseReportViewSet.exportc             C   s   | dd |S )Nr   zNo.)insert)r#   Zheadersr&   r&   r'   update_export_headers   s    z+DeptWiseReportViewSet.update_export_headersNc             C   s   xt |D ]z\}}y| jd}W n   d}Y nX |rLd||  d ||< t|trh|d|d  q
t|}|dd |||< q
W |S )z"only use for att report pdf reportr%   Nz<span class="att_date">z</span>r      r!   )	enumeraterq   index
isinstancerB   r{   )r#   Zdatasrq   
extra_datairc   Zatt_date_indexr&   r&   r'   update_data_list   s    

z&DeptWiseReportViewSet.update_data_listc             C   s   | j | jtS )N)serializer_dictr"   r   r   )r#   r&   r&   r'   get_serializer_class  s    z*DeptWiseReportViewSet.get_serializer_classc             C   s   t d tdS )NZenzDepartment-wise Report)r   r3   )r#   r&   r&   r'   get_file_title  s    z$DeptWiseReportViewSet.get_file_title)N)r-   r.   r/   r   r0   rY   rG   Zselect_relatedrQ   rR   r4   Zfilter_classrx   r3   Zextra_headers_translation_dictr   r   rd   rB   r   rC   r|   r   r   r   __classcell__r&   r&   )rT   r'   r;   @   s(   ;-
r;   )0r9   r   collectionsr   Zrest_framework.exceptionsr   r:   Zdjango.db.models.functionsr   Zdjango.utils.translationr   r3   r   Zrest_frameworkr   r	   Zrest_framework.responser
   Zrest_framework.decoratorsr   r   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   Zmysite.att.utilsr   Zmysite.iclock.modelsr   Zmysite.personnel.modelsr   r   r   r   r   Zdjango.db.modelsr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   r4   ZListModelMixinr;   r&   r&   r&   r'   <module>   s,   