B
    cb%                 @   sH  d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZ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 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' d dlm(Z( d dl)m*Z* d dl+m,Z,m-Z- ej./e%dZ0G dd dej1Z2G dd dej3eZ4dS )    N)OrderedDict)CaseWhenIntegerFieldValue	TextField)Sum	AggregateCount)gettext_lazyactivate)mixinsserializers)Response)APIException)NoneSerializer)ReportGenericFilter)ReportUtilGenericViewSet)PayloadBase)get_item_symbol)ADDITION_FILE_ROOT)report_dict)Q)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGZreportsc                   sd   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	 fd
dZ
G dd dZ  ZS ) MonthlyAttSheetSummarySerializerZreport_column_employeeCount	emp_count)labelsourceZreport_column_positionCodeemp__position__position_codeT)r   r   
allow_nullZreport_column_positionNameemp__position__position_namec                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_monthlyattsheetsummary.pyr&   $   s
    
z)MonthlyAttSheetSummarySerializer.__init__c               @   s   e Zd ZeZdZdS )z%MonthlyAttSheetSummarySerializer.Meta)position_codeposition_name	total_empN)__name__
__module____qualname__r   modelr)   r.   r.   r.   r/   Meta+   s   r7   )r3   r4   r5   r   r   _r2   r(   r0   r1   r&   r7   __classcell__r.   r.   )r-   r/   r      s   r   c                   s   e Zd ZeZej  Ze	Z
dgZdgZeedZdZdZi Z fddZdd Z fd	d
Zdd Zdd Zdd Zdd Zdd ZdddZdd Z  ZS )MonthlyAttSheetSummaryViewSetr2   zNo.)listZexportNc                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%   r:   get_querysetrequestuserZcurrent_companyZis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsalldistinctstrr   getr   r   r   	Exceptionr   )r*   querysetZ
company_idZbase_filterZ	auth_deptZ	auth_areaZauth_posr<   )r-   r.   r/   r>   M   s.    





$z*MonthlyAttSheetSummaryViewSet.get_querysetc             C   sB  | ddd}i }| jjdd }| jjdd }g }|r
|r
td}tj|	d|d d d}tj|	d|d d d}x|||krt
tt|d	td
dt d||d< ||d|d|df |tjd
d7 }| j|d qW || _tddd|d< |jf |}| j|d |S )Nr    r"   
start_dateend_datez[-:\s]    z%Y%m%dr      )Zatt_dateZduty_worked__gtZthen)Zoutput_fieldz%Y/%m/%dz%m/%dz%d)daysZempT)rD   r   z%b.%Y)valuesZorder_byr?   GETrF   recompiledatetimestrptimesubr   r   r   r   r   strftimeappendZ	timedeltasummary_fieldsr'   r
   Zannotateexport_headers_pro)r*   rH   rO   rI   rJ   r'   patternr.   r.   r/   annotate_querysetf   s,    
*z/MonthlyAttSheetSummaryViewSet.annotate_querysetc                s   | |d< t t| j||S )Nr#   )r%   r:   get_serializer)r*   r+   r,   )r-   r.   r/   r\      s    z,MonthlyAttSheetSummaryViewSet.get_serializerc             C   s   | j | jtS )N)serializer_dictrF   actionr   )r*   r.   r.   r/   get_serializer_class   s    z2MonthlyAttSheetSummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenz Monthly Attendance Sheet Summary)r   r8   )r*   r.   r.   r/   get_file_title   s    z,MonthlyAttSheetSummaryViewSet.get_file_titlec             C   s0   |   }| j| | |  }| |}|S )N)generate_time_mapextra_headers_translation_dictupdatefilter_querysetr>   r[   )r*   time_maprH   r.   r.   r/   get_export_queryset   s
    
z1MonthlyAttSheetSummaryViewSet.get_export_querysetc       	      O   s   |  |  }| |}| |}|d k	rx| j|dd}x2t|jD ]$\}}t|trD|d |j| d< qDW | 	|jS | j|dd}t
|jS )NT)ZmanyrM   zNo.)rd   r>   r[   Zpaginate_querysetr\   	enumeratedata
isinstancer   Zget_paginated_responser   )	r*   r?   r+   r,   rH   ZpageZ
serializerindexvr.   r.   r/   r;      s    


z"MonthlyAttSheetSummaryViewSet.listc             C   s*  | j jdd }| j jdd }|d\}}}|d\}}}td}	tj|	d|d d d}|d | }
|d | }d	}| j	
| xt|D ]|\}}t|tr|d
 || d< d}d}xDt| D ]4\}}||
krd}|rq|r|t|7 }||krP qW ||| |< qW | j
| |S )NrI   rJ   -z[-:\s]rK   rL   z%Y%m%d/zTotal AttendancesrM   zNo.Tr   F)r?   rP   rF   splitrQ   rR   rS   rT   rU   export_headersrW   rg   ri   r   r;   itemsintrX   )r*   datasrI   rJ   r8   Zm_fZd_fZm_lZd_lrZ   Z
first_dateZ	last_dateZ	sum_fieldrj   rk   Zcon_flagZpresent_countkeyvaluer.   r.   r/   update_datas_before_export   s6    

z8MonthlyAttSheetSummaryViewSet.update_datas_before_exportc       	         s   j pg }t |} fdd|D _jrtt| }dd tdt|D }ttfdd||}|rdt	d |d< |
t| |S )	Nc                s   g | ]}  |qS r.   )rj   ).0h)ro   r.   r/   
<listcomp>   s    zBMonthlyAttSheetSummaryViewSet.update_data_list.<locals>.<listcomp>c             S   s   g | ]}|qS r.   r.   )rv   ir.   r.   r/   rx      s    r   c                s      j| |S )N)Z
data_countstatics_fields_index)ry   x)r*   r.   r/   <lambda>       z@MonthlyAttSheetSummaryViewSet.update_data_list.<locals>.<lambda>z%sZTotal)rX   setintersectionrz   r;   ziprangelenmapr8   rW   tuple)	r*   rr   ro   
extra_datarX   Z_summary_fieldsZlist_xZlist_iZsummary_colsr.   )ro   r*   r/   update_data_list   s    

z.MonthlyAttSheetSummaryViewSet.update_data_listc             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SrI   rl   rM      rm   z%s %s)r?   rP   rF   rn   calendarZ
monthrangerq   r   ZweekdayzfillrE   )r*   Zsym_weekre   rI   ymr8   rN   ry   Zwofkr.   r.   r/   ra      s     z/MonthlyAttSheetSummaryViewSet.generate_time_map)N)r3   r4   r5   r   r6   ZobjectsrC   Zselect_relatedrH   r   Zfilter_classrX   rY   r   r]   Z
categoriesr'   rb   r>   r[   r\   r_   r`   rf   r;   ru   r   ra   r9   r.   r.   )r-   r/   r:   >   s(    
r:   )5rS   rQ   osr   collectionsr   Zdjango.db.modelsr   r   r   r   r   Zdjango.db.models.aggregatesr   r	   r
   Zdjango.utils.translationr   r8   r   Zrest_frameworkr   r   Zrest_framework.responser   Zrest_framework.exceptionsr   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr   r   Zmysite.att.modelsr   Zmysite.att.utilsr   Zmysite.settingsr   Zmysite.api.report_export_dictr   r   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   pathjoinZEXPORT_ROOTZModelSerializerr   ZListModelMixinr:   r.   r.   r.   r/   <module>   s.   !