B
    Lc6                 @   s  d dl Z d dlZd dl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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 G dd de	jZG dd dej eZ!dd Z"dddZ#dddZ$dddZ%dd Z&dS )    N)gettext_lazyactivate)mixinsserializers)Response)Q)NoneSerializer)ReportUtilGenericViewSetReportGenericFilter)PayloadBase)get_item_symbols)CHOICE_GENDER)
C_ATT_RULE)STATUS_VALIDSTATUS_RESIGN_PENDINGc                   s   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ejed
dddZ	ej
e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 fddZdd ZG dd dZ  ZS ) MonthlyDurationSummarySerializerZreport_column_empCodeemp__emp_code)labelsourceZreport_column_firstNameemp__first_nameT)r   r   
allow_nullZreport_column_lastNameemp__last_nameZreport_column_nickNameemp__nicknameZreport_column_gender)r   Zreport_column_departmentCodeemp__department__dept_codeZreport_column_departmentNameemp__department__dept_nameZreport_column_positionCodeemp__position__position_codeZreport_column_positionNameemp__position__position_namez	Type\Dateget_data_typec                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_monthlydurationsummary.pyr!   &   s
    
z)MonthlyDurationSummarySerializer.__init__c             C   s   t t|d |d S )Nemp__gender)dictr   get)r%   objr)   r)   r*   
get_gender-   s    z+MonthlyDurationSummarySerializer.get_genderc               @   s   e Zd ZeZdZdS )z%MonthlyDurationSummarySerializer.Meta)emp_code
first_name	last_name	nick_namegender	dept_code	dept_nameposition_codeposition_name	data_typeatt_dateN)__name__
__module____qualname__r   modelr$   r)   r)   r)   r*   Meta0   s   r?   )r;   r<   r=   r   r#   _r0   r1   r2   r3   ZSerializerMethodFieldr4   r5   r6   r7   r8   r9   r!   r/   r?   __classcell__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ZdgZi Zdd Zdd	 Zd
d Zdd Z fddZ fddZdd Zdd Zdd Z  ZS )MonthlyDurationSummaryViewSetemp_idr:   )listZexportNr9   c             C   s  | j }| jjj}g }d}x|D ]}|d }|d |kr|d }| }| }	| }
| }d|
d< d|	d< d|d< d|d< ||
|	||f t|d	 }t|d
 |d |d |d |d |d |d |d |d | jjj|d |d |d|d |< t	j	|d	 j
|d	 j|d	 jd}t||||}|d k	rD||d |< t|d |d |d d|d |< t|d |d |d d|d |< t|d |d |d d|d |< q W |S )N emp__idr   ZStatusr   zClock Inz	Clock OutzTotal WKr:   day_offduty_workedearly_leavelateabsentleavehalf_dayclock_in	clock_out)old_datafile_format)yearmonthday)rQ   total_worked)rR   requestusercurrent_companycopyextendatt_date_formatget_status_displayr-   datetimerS   rT   rU   r   get_clock_displayget_total_display)r%   ZdatasrR   
company_idZresult_dataZtemp_emp_codevrC   Ztotal_detailsZclock_in_detailsZstatus_detailsZclock_out_detailsZ
cur_v_dataZ	data_dateZ	data_dictr)   r)   r*   update_daily_datasE   sF    
"
 z0MonthlyDurationSummaryViewSet.update_daily_datasc             C   st   |   }| j| | |  ddddddddd	d
dddddddddddddd}|   | t	|}|S )NrF   r   r   r   r   r+   r   r   r   r   r:   rN   rO   rX   rG   rH   rI   rJ   rK   rL   rM   emp__department_id)
generate_time_mapextra_headers_translation_dictupdatefilter_querysetget_querysetvaluesorder_byupdate_date_periodrf   rD   )r%   time_mapquerysetr)   r)   r*   get_export_querysetm   s     z1MonthlyDurationSummaryViewSet.get_export_querysetc             O   s   |  |  ddddddddd	d
dddddddddddddd}|   | t|}| |}|d k	r| j|dd}| 	|j
S | j|dd}t|j
S )NrF   r   r   r   r   r+   r   r   r   r   r:   rN   rO   rX   rG   rH   rI   rJ   rK   rL   rM   rg   T)Zmany)rk   rl   rm   rn   ro   rf   rD   Zpaginate_querysetget_serializerZget_paginated_responsedatar   )r%   rZ   r&   r'   rq   ZpageZ
serializerr)   r)   r*   rD      s&    
z"MonthlyDurationSummaryViewSet.listc             C   s   | j jdd }| j jdd }g }|r|rtd}tj|d|d d d}tj|d|d d d}x>||kr||	d|	d|	d	f |tj
d
d7 }qtW || _d S )N
start_dateend_datez[-:\s]rE      z%Y%m%dz%Y/%m/%dz%m/%dz%d   )days)rZ   GETr-   recompilera   strptimesubappendstrftimeZ	timedeltar"   )r%   ru   rv   r"   patternr)   r)   r*   ro      s    

z0MonthlyDurationSummaryViewSet.update_date_periodc                s   t t|  }| jjj}| jjjs|j|d}| jjjs| jjj	}| jjj
}| jjj}i }| rn| |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)r    rB   rl   rZ   r[   r\   Zis_employeefilterZis_superuserZget_auth_deptZget_auth_areaZget_auth_posexistsallZdistinctstrr   r-   r   r   r   )r%   rq   rd   Z	auth_deptZ	auth_areaZauth_posfiltersr   )r(   r)   r*   rl      s,    





 z*MonthlyDurationSummaryViewSet.get_querysetc                s   | |d< t t| j||S )Nr   )r    rB   rs   )r%   r&   r'   )r(   r)   r*   rs      s    z,MonthlyDurationSummaryViewSet.get_serializerc             C   s   | j | jtS )N)serializer_dictr-   actionr   )r%   r)   r)   r*   get_serializer_class   s    z2MonthlyDurationSummaryViewSet.get_serializer_classc             C   s   t d tdS )NZenz$Monthly Status Report(Work Duration))r   r@   )r%   r)   r)   r*   get_file_title   s    z,MonthlyDurationSummaryViewSet.get_file_titlec             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Sru   -rx      /z%s %s)rZ   rz   r-   splitcalendarZ
monthrangeintrangeZweekdayzfillr   )r%   Zsym_weekrp   ru   ymr@   ry   iZwofkr)   r)   r*   rh      s     z/MonthlyDurationSummaryViewSet.generate_time_map)r;   r<   r=   r   r>   Zobjectsrl   Zselect_relatedrn   rq   r
   Zfilter_classr   r   r"   Zexport_headers_prori   rf   rr   rD   ro   rs   r   r   rh   rA   r)   r)   )r(   r*   rB   8   s"   (rB   c             C   s   |  d}|S )Nz%Y/%m/%d)r   )r:   resultr)   r)   r*   r_      s    
r_   c             C   s0   | rt t| | pddnd}|s$|S |d | S )Nr   durationrE   z, )r   
deal_param)totalrQ   r   r)   r)   r*   rc      s    rc   c             C   s0   ddl m} | r|| nd}|s$|S |d | S )Nr   )short_time_formatrE   z, )mysite.att.utilsr   )clockrQ   r   r   r)   r)   r*   rb      s    rb   c             C   s  ddl m} d}dddd}|t| d} | rN|d krN|d krN|| |	|}n|dkrd|d|	|}n|r~|dkr~|d	|	|}n|r|dkr|d
|	|}n|r|dkr|d|	|}nv|r|dkr|d|	|}n\|r|dkr|d|	|}nB|d kr|d k	r|d|	|}n |d k	r(|d kr(|d|	|}| dkrL|rL|rL|d|	|}n"| dkrn|rn|rn|d|	|}|
sx|S |
d | S )Nr   )get_item_symbolrE   rG   ZweekendZholiday)123rM   ZpresentZ	early_outZlate_inrK   rL   Zmiss_inZmiss_outZweekdayoff_pZ	holiday_pz, )r   r   r-   r   )rG   rH   rI   rJ   rK   rL   rM   rN   rO   rd   rQ   rR   r   r   Zday_off_dictr)   r)   r*   r`      s:    r`   c             C   s   ddl m} |||| ddS )Nr   )value_format)Zwork_day)r   r   )r   valkeyr   r)   r)   r*   r   	  s    r   )N)N)NN)'ra   r{   r   Zdjango.utils.translationr   r@   r   Zrest_frameworkr   r   Zrest_framework.responser   Zdjango.db.modelsr   Zmysite.att.api.serializersr   Zmysite.att.api.utils_classr	   r
   Zmysite.att.modelsr   r   r   Zmysite.personnel.db_constr   Zmysite.att.global_cacher   Zmysite.admin.modelsr   r   ZModelSerializerr   ZListModelMixinrB   r_   rc   rb   r`   r   r)   r)   r)   r*   <module>   s*   # 


"