B
    b**                 @   s   d dl Zd dlZd dl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mZ d d	lmZmZ G d
d deZdddZdd Zdd Zdd ZdddZdddZdS )    N)settings)cache)gettext)MultipartEncoder)Employee
Department)LineNotifySetting)get_tuple_valueconvert_image_format)VERIFY_TYPEPUNCH_STATEc               @   s8   e Zd ZdZdZdZdZdddZdd	 ZdddZ	dS )
LineNotifyz
    LINE Messenger Notify
    )-      )+   r   )&   r   Nc             C   s4   || _ || _d| _dd| i| _|s0ttdd S )Nz%https://notify-api.line.me/api/notifyZAuthorizationzBearer Zempty_token_validation)tokencompanyurlheaders
ValueError_)selfr   r    r   5G:\easytimepro\master/mysite/base\line\line_notify.py__init__    s    zLineNotify.__init__c             C   s   | j rd|| j }|S )Nz	{0}
[{1}])r   format)r   messager   r   r   message_format(   s    zLineNotify.message_formatFc       
      C   s   d|  |i}|r<|r|s<| j\}}|t|t|d |rvtj|rvtj|\}}|d|t|ddfi t	|d}	| j
d|	ji tj| j| j
|	d d S )	Nr   )Z	stickerIdZstickerPackageIdZ	imageFilerbz	image/png)fieldszContent-Type)r   data)r   sticker_good_luckupdatestrospathisfilesplitopenr   r   Zcontent_typerequestsZpostr   )
r   r   
image_path
sticker_id
package_idZpush_stickerr    Z	path_headZ	path_tailr!   r   r   r   send.   s    

zLineNotify.send)N)NNNF)
__name__
__module____qualname____doc__r"   Zsticker_good_byeZsticker_sorryr   r   r.   r   r   r   r   r      s   
r   c             K   sp  g }	d}
|dk	st d|dkrl| r4|r4|r4|r4|s<t dt|}|rt|j|| }
|	t|j n.|dkr|dk	st d|	t| nt	|	rlx|	D ]}|dkr|j
dkrtf |j| t|t|||j|j|j||
|j|jd| q|dkr|j
dkrtj }|tjdd	  }| |jkr|j|krt|j| |j|jd
k|j|jd qW dS )up    把信息推送到line
    message_type: 100:实时推送考勤记录；200:推送部门当日考勤概要
    Nz&Parameter message_type cannot be emptyd   zrParameters punch_time and verify_type and punch_state and punch_state and terminal_sn and emp_code cannot be empty   z!Parameter deptids cannot be empty)r   
punch_timeverify_typepunch_stateterminal_snemp_code
first_namenicknameterminal_aliasr+   message_headmessage_tail<   )Zseconds   )include_sub_departmentr=   r>   )AssertionErrorr   ZobjByPIN_get_line_image_pathr9   extendr   Zobj_list_by_deptidZdepartment_idr   message_type_real_time_message_formatZline_notify_token_get_verify_type_value_get_punch_state_valuer:   r;   r=   r>   datetimenowZ	timedeltatimeZ	push_time+_intraday_attendance_summary_message_formatdateZline_notify_dept_idrA   )r5   r6   r7   r8   r9   r<   deptidrE   kwargsZline_notify_obj_listr+   ZempobjobjrJ   Z	next_timer   r   r   send_line_notify@   sT    



rQ   c             C   s   t t| tS )N)r	   intr   )r6   r   r   r   rG      s    rG   c             C   s
   t | tS )N)r	   r   )r7   r   r   r   rH      s    rH   c          	   C   s   ddl m} d }tjdtjdtj	 
d|dttj|| }tj|rtd| sdtjd	}|| tj|d
| }tj|rtd| st|| d|d}td| dd |S )Nr   )	createDirz{0}{1}/{2}/{3}uploadz%Y%mz{0}-{1}.jpgz{0}_linenotify_push_image_flagz{0}{1}z
line/photoz{0}.pngZpng)Znew_image_nameZ
new_formatZnew_dirr@      )Zmysite.utilsrS   r%   r&   joinr   r   ZADDITION_FILE_ROOTrI   rJ   strftimefilterr$   isdigitr'   r   getr
   set)r9   Zsnr5   rS   r+   Zatt_photo_pathZline_photo_dirr   r   r   rC      s$    rC   c             K   sv  | rrd}d}d}|
r||
7 }|r<|dt d d|  7 }n|dt d d|  7 }|rd|krnt|d}d|krt|d}x$| D ]\}}|d||7 }qW |dt d	 d
 dj|d 7 }|dt d d
 dj|d 7 }|dt d d
 dj|d 7 }|dt d d
 dj|d 7 }|dt dj|d 7 }|rT|d| 7 }t| |d}|j||	||d dS )u&    推送每条考勤记录详细信息 N 
ZHelloz %sr,   r-   z{0}:{1}
r9   :z
{emp_code})r9   r5   z{punch_time})r5   Zverity_typez{verify_type})r6   r7   z{punch_state})r7   z5attendance is checked on machine number {terminal_sn})r8   z(%s))r   )r+   r,   r-   )r   rR   popitemsr   r   r.   )r   r5   r6   r7   r8   r9   r:   r;   r<   r+   r=   r>   rO   r,   r-   r   kvnotifyr   r   r   rF      s2        rF   Tc             C   s  ddl m} ddlm} | r|}tj }	|g}
|rN|
||jddd tj	j
|d}tj	j|
djd	dd}|j	j||	g|d
d	 }| }t|}|| }|dkr|t| }nd}d}|r||7 }|dtdj|jd 7 }|dtdj|d 7 }|dtdj|d 7 }|dtdj|d 7 }|dtj d 7 }t| |d}|| |dkrd}|dk	r| d nd}tj	j|dd	d}xV|D ]N}dj|d	 |d d}| | |  dk r||7 }n|| |}qW || dS ) u    推送当天考勤概要 r   )Transaction)get_all_childrens_by_deptididT)Zflat)Zpk)Zdepartment_id__inr9   )Zpunch_time__rangeemp_code__inr\   r]   zCThe current attendance situation of the {dept_name} is shown below:)	dept_namez

zattendance: {attendance} people)
attendancezabsent: {absent} people)absentz!attendance rate: {percentage:.2%})
percentagez%Y-%m-%d %H:%M:%S)r   zabsent employee list:
Nr@   )rg   r:   z{emp_code}({first_name})
)r9   r:   i  )Zmysite.iclock.modelsrd   Z(mysite.personnel.models.model_departmentre   rI   rJ   rD   Zvalues_listr   ZobjectsrZ   r   rX   Zdistinctcountlenfloatr   r   rh   rW   r   r.   __len__Zexcludevalues)r   r!   rN   rA   r=   r>   rd   re   stZetZdeptidsZdept_objZempsZtransaction_qsri   Zquantityrj   rk   r   rc   Ztail_lengthZabsent_empsZempZnext_empr   r   r   rL      sR    	








rL   )NNNNNNNN)NNNNN)TNN) Zos.pathr%   rI   r*   Zdjango.confr   Zdjango.core.cacher   Zdjango.utils.translationr   r   Zrequests_toolbeltr   Zmysite.personnel.modelsr   r   Zmysite.base.modelsr   Zmysite.base.line.line_utilsr	   r
   Zmysite.iclock.choicesr   r   objectr   rQ   rG   rH   rC   rF   rL   r   r   r   r   <module>   s<   *       
9     
*  