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mZmZmZmZmZmZmZmZmZ eG dd dZG dd	 d	eZdS )
    N)gettext_lazy)	dataclass)ladonize)
SUCCESS_CODEMESSAGE_CODEinterface_responserequest_validonline_employee_newstamp2datetimedatetime2stampSYSTEM_EXCEPTIONDATA_EXCEPTION
user_photoc               @   s   e Zd ZU eed< eed< dS )ApprovalStatusDTOnamestatusN)__name__
__module____qualname__str__annotations__ r   r   AG:\easytimepro\master/mysite/mobile\services\app_reimbursement.pyr      s   
r   c               @   sx  e Zd ZdZeeeeeeeddd Zeeeeeeeddd Z	eeeeeeeee
eeeeeeddd Zeeeeeeeedd	d
 Zeeeeeeeeddd Zeeeeeeeeeee
eeeeeeddd Zeeeeeeeeeeddd Zeeeeeeeeeeddd Zeeeeeeeeeddd Zeeeeeeeeeddd ZdS )BioTimeAppReimbursementu   
    【Reimbursement】
    )Zrtypec          
   C   s   ddl m} yHt|}|jjj}|jj|dd}dd |D }	t	t
t|	ddS  tk
r }
 z dd	l}|  t	tdd|
tS d	}
~
X Y nX d	S )
u  
        Get allowanceType
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code":1,"error":"","describe":"","message":"","data":[{}]}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   )AllowanceType)companyidc             S   s   g | ]}|j |jd qS ))r   allowance_type)r   allowance_name).0objr   r   r   
<listcomp>,   s    z9BioTimeAppReimbursement.allowanceType.<locals>.<listcomp> 
successfulN)mysite.payroll.modelsr   r	   
departmentr   r   objectsfilterorder_byr   r   jsondumps	Exception	traceback	print_excr   r   )selfsourcedevice_tokenlanguagetokenr   emp
company_idr   choiceser,   r   r   r   allowanceType   s    
z%BioTimeAppReimbursement.allowanceTypec          
   C   s   ddl m} yHt|}|jjj}|jj|dd}dd |D }	t	t
t|	ddS  tk
r }
 z dd	l}|  t	tdd|
tS d	}
~
X Y nX d	S )
u  
        Get allowanceType
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code":1,"error":"","describe":"","message":"","data":[{}]}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   )PurposeType)r   r   c             S   s   g | ]}|j |jd qS ))r   purpose_type)r   purpose_name)r   r    r   r   r   r!   H   s    z7BioTimeAppReimbursement.purposeType.<locals>.<listcomp>r"   r#   N)r$   r8   r	   r%   r   r   r&   r'   r(   r   r   r)   r*   r+   r,   r-   r   r   )r.   r/   r0   r1   r2   r8   r3   r4   r9   r5   r6   r,   r   r   r   purposeType3   s    
z#BioTimeAppReimbursement.purposeTypec       ?         s  t |
}yFddl}ddl}ddl}ddl}ddl}ddlm} ddl}ddl	m
} ddlm}m} ddlm} ddlm} t|j }t|}t|}|}|jj|d}|}|jj|d}|jj|jd	}|sd
td}d
td}ttdd||S ||kr4d
td}d
td}ttdd||S |rv||j krvd
td}d
td}ttdd||S |r||j krd
td}d
td}ttdd||S |sd
td}d
td}ttdd||S |dkr d
td}d
td}ttdd||S g } t|}!g }"x|!D ]}#|"|# q8W d}$d}%dddddddg}&|"r|r|dd }'|jd|' }(|(ddt t!| d  }%x"|"D ]})d d" fdd t#dD }*|)$d!}+t|j%|* d" |+d  },|,$d"}-|-d# }.|.& }.|.|&krHd}/td$}td$}ttd|/||S |-'  |-|. | |, |(t|+d% }0|)|0}1|1* }2|j+"|%|,}3|j+,|%s|-|% t.|3d&}4|4/|2 W dQ R X qW t0| dkrd'"| }$n,d
td(}d
td(}ttdd||S |jj1||d |d |||||d)}5|$rd|j|5j}6|(|6 }7|j+,|7st|-|7 |2|%}8xT|8D ]L}1|j+3|1s|14d*5d+}1|j+"|%|1}9|j+"|7|1}:|6|9|: qW |$|5_7|58  |%r,|j+,|%r,|9|% |(d, };|j+,|;r,|2|;s,|9|; d-d
td.i}<tt:t;|<dd/S  t<k
r }= z&ddl=}>|>>  ttdd|=d
|=S d}=~=X Y nX dS )0u  
        Apply employee punch status
        @param start_date
        @param end_date
        @param allowance_type
        @param purpose_type
        @param additional_employee
        @param receipts
        @param amount
        @param remark
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code": 1, "error": "", "describe": "", "message": "", "data":{"message":"Pop-up message"}}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   N)Image)settings)r   r8   )Reimbursement)SalaryStructure)r   )employee_idz{0}zPayroll structure not foundr"   "leave_time_invalid_range_start_end7reimbursement_startdate_cannot_greater_than_current_day5reimbursement_enddate_cannot_greater_than_current_dayloan_fields_requiedthe_amount_need_lager_than_zerojpgjpegpngbmppdfdocxxlsx
   z{0}/z{0}/{1}/rooti  >ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890c             3   s   | ]}t  V  qd S )N)randomchoice)r   x)charsr   r   	<genexpr>   s    z0BioTimeAppReimbursement.apply.<locals>.<genexpr>@.-reimbursement_receipt_file_format_constraints   wb/Zreceipt_file_validation)Zemployeer   r9   
rmb_amountrmb_start_datermb_end_date
rmb_remarkadditional_employeezutf-8gbkzroot/messagezRequest already processingr#   )?r	   osdatetimeshutiltimebase64PILr<   iodjango.confr=   r$   r   r8   r>   ,mysite.payroll.models.model_salary_structurer?   r   nowr
   r&   r'   r   format_r   r   todayr)   loadsappendREIMBURSEMENT_FILE_ROOThexintjoinrangesplitemp_codelowerpop	b64decodeBytesIOgetvaluepathexistsmakedirsopenwritelencreatelistdirisfileencodedecodecopyrmb_filesavermtreer   r*   r+   r,   r-   )?r.   
start_dateend_dater   r9   r`   receiptsamountremarkr/   r0   r1   r2   r3   rc   rd   re   rf   rg   r<   ri   r=   r   r8   r>   r?   rmb_dater]   r^   salary_structure_datadescriberb   
files_nameuploaded_files	rmb_filesrR   Z	rpt_filessource_filefiles_format	file_date	file_rootr   	randomstrfind_img_extension	file_name	name_listf_formaterrorimageimg	file_data	file_pathfr    	path_info	emp_files	img_filesZs_filenew_fileZ	root_pathdatar6   r,   r   )rS   r   applyO   s    



 











zBioTimeAppReimbursement.applyc       0   
   C   s\  ddl }ddl}ddl}ddlm}	 ddlm}
 ddlm} ddl	m
} ddlm} yt|}|
jj|jdd	}d
}|pd}|d | }|| }||| }g }|rxT|D ]J}|j|j }}t||jr|d}n|dd
 }|	jd| }dd| }d||j}|j||}|j||}g }|j|rx||}x&|D ]}|j||}|| qVW i } |jj|jjd}!|jj|jj d}"i }#|j!r
x`|"|j!D ]J}$y2|jj|$d}%|%d j#p|%d j$|#|%d j< W n   i }#Y nX qW ni }#|j%j}&|jj|&d& }'|'j'd( }(g })t)|}*x2|(D ]*}+t*|*|+j+ },|+j,|,d}-|)|- qJW |j| d	< |!| d< |"| d< |j-| d< |#| d< || d< |j.| d< t*|j/| d< t*|j0| d< |j1| d< |j%j2| d< |)r|)| d < ||  qW t3t4|5|d!d"S  t6k
rV }. z ddl7}/|/8  t3t9d!d!|.t:S d}.~.X Y nX dS )#u  
        GET reimbursementView
        @param page_num:        page number(10 items/page)
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code":1,"error":"","describe":"","message":"","data":[{}]}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   N)r=   )r>   )Employee)ALL_AUDIT_STATUS)WorkflowInstance)r@   r   rM   rY   z%Y-%m-%dz/{0}zfiles/reimbursementz{0}/{1})r   r   )r   r9   )r   )	exceptionorder)r   r   r   r9   r   r`   r   Zreceipts_namer]   r^   Zremarksr   approval_listr"   r#   );rc   r)   rd   rj   r=   r$   r>   mysite.personnel.modelsr   mysite.att.models_choicesr   (mysite.workflow.models.workflow_instancer   r	   r&   r'   r   r(   
apply_timer@   
isinstancestrftimerr   rm   r~   ru   r   r   rq   r   r   r9   r:   r`   rp   
first_namerx   workflow_abstractExceptionfirstnodeinstance_setalldictr   stater   r\   r   r]   r^   r_   audit_statusr   r   r*   r+   r,   r-   r   r   )0r.   page_numr/   r0   r1   r2   rc   r)   rd   r=   r>   r   r   r   r3   reimbursement	page_sizestartendr5   rR   r   emp_idsetting_path
recpt_root	file_infor   
recpt_fileimgsr   r   file_urlr   	allowancepurposeadditional_employee_datayempsZworkflow_excpetion_idZworkflow_instance_Znode_instance_approval_statusZapproval_statusesir   noder6   r,   r   r   r   reimbursementView   s    






z)BioTimeAppReimbursement.reimbursementViewc          
   C   s   ddl m} yNt|}|jjj}|jj|d}	|	  dd	t
di}
ttt|
ddS  tk
r } z dd	l}|  ttdd|tS d	}~X Y nX d	S )
u  
        Delete reimbursementDelete
        @param id
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code":1,"error":"","describe":"","message":"","data":[{}]}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   )r>   )r   rb   z{0}zRequest already processingr"   r#   N)r$   r>   r	   r%   r   r   r&   r'   deleterm   rn   r   r   r)   r*   r+   r,   r-   r   r   )r.   r   r/   r0   r1   r2   r>   r3   r4   r    r   r6   r,   r   r   r   reimbursementDeleteB  s    
z+BioTimeAppReimbursement.reimbursementDeletec       ?         s  t |}yNddl}ddl}ddl}ddl}ddl}ddlm} ddl}ddl	m
} ddlm}m} ddlm} ddlm} t|j }t|}t|}|}|jj|d}|}|jj|d}|jj|jd	}|sd
td} d
td}!ttdd| |!S ||kr4d
td} d
td}!ttdd| |!S |rv||j krvd
td} d
td}!ttdd| |!S |r||j krd
td} d
td}!ttdd| |!S |	sd
td} d
td}!ttdd| |!S |	dkr d
td} d
td}!ttdd| |!S |jj|d}"|"d j}#|"d jd}$|$}%ybt|}&xRt t!|&D ]B}'d|&|' kr|&|' "dd }(n|&|' "dd }(|(|&|'< qfW W n   g }&Y nX t|})|j#}*t!|)dkr
t!|&dkr4dt|"d j$dd |j|}+xN|&D ]F},|*|+ d |, }-y|%|- W n   Y nX |,|%kr|%%|, qW g }.x|)D ]}'|.&|' qhW dddddddg}/t!|.dkrdt|"d j$dd |j|}+|*|+ }0|j'(|0s|)|0 x$|.D ]D}1d d* fdd t dD }2|1d!}3t|j+|2 d" |3d  }4|4d"}5|5d }6|6, }6|6|/krxd}7td#} td#}!ttd|7| |!S |5-  |5&|6 |%&|4 |.t|3d$ }8|/|8}9|90 }:t1|0d |4 d%};|;2|: W dQ R X |"j3|d |d |	|||
|d*|%d& d'd
td(i}<tt4t5|<dd)S W qVg }.x|)D ]}'|.&|' q>W dddddddg}/t!|.dkrVdt|"d j$dd |j|}+|*|+ }0|j'(|0s|)|0 x|.D ]D}1d d* fd*d t dD }2|1d!}3t|j+|2 d" |3d  }4|4d"}5|5d }6|6, }6|6|/krNd}7td#} td#}!ttd|7| |!S |5-  |5&|6 |%&|4 |.t|3d$ }8|/|8}9|90 }:t1|0d |4 d%};|;2|: W dQ R X |"j3|d |d |	|||
|d*|%d& d'd
td(i}<tt4t5|<dd)S W nLt!|)dkr0t!|t!|%krNd}7td#} td#}!ttd|7| |!S t!|&t!|%k rVt!|&dkrdt|"d j$dd |j|}+xN|&D ]F},|*|+ d |, }-y|%|- W n   Y nX |,|%kr|%%|, qW |"j3|d |d |	|||
|d*|%d& d'd
td(i}<tt4t5|<dd)S n&d'd
td+i}<ttt5|<dd)S W nF t6k
r }= z&ddl7}>|>8  ttdd|=d
|=S d}=~=X Y nX dS ),u  
        Apply employee punch status
        @param id
        @param start_date
        @param end_date
        @param allowance_type
        @param purpose_type
        @param additional_employee
        @param receipts
        @param amount
        @param remark
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code": 1, "error": "", "describe": "", "message": "", "data":{"message":"Pop-up message"}}
            fail
                {"code":-10001,"error":"","describe":"","message":"Pop-up message","data":""}
        r   N)r<   )r=   )r   r8   )r>   )r?   )r   )r@   z{0}zPayroll structure not foundr"   rA   rB   rC   rD   rE   r[   \rW   z{0}/{1}/{2}rM   rF   rG   rH   rI   rJ   rK   rL   rO   c             3   s   | ]}t  V  qd S )N)rP   rQ   )r   rR   )rS   r   r   rT     s    z>BioTimeAppReimbursement.reimbursementUpdate.<locals>.<genexpr>rU   rV   rX   rY   rZ   )r   r9   r\   r]   r^   r_   r`   r   rb   zRequest already processingr#   c             3   s   | ]}t  V  qd S )N)rP   rQ   )r   rR   )rS   r   r   rT     s    zHi Firend Please test your self)9r	   rc   rd   re   rf   rg   rh   r<   ri   rj   r=   r$   r   r8   r>   rk   r?   r   rl   r
   r&   r'   r   rm   rn   r   r   ro   r   rw   r)   rp   rv   r   rsplitrr   r   removerq   r~   r   r   ru   rx   ry   rz   r{   r|   r}   r   r   updater   r*   r+   r,   r-   )?r.   r   r   r   r   r9   r`   r   Zdeleted_receiptsr   r   r/   r0   r1   r2   r3   rc   rd   re   rf   rg   r<   ri   r=   r   r8   r>   r?   r   r]   r^   r   r   rb   r   Zreceold_filer   Zold_deleted_filesrR   Zold_deleted_newfiler   r   r   Zdel_filer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r,   r   )rS   r   reimbursementUpdatea  s^   





"


"








"







"


z+BioTimeAppReimbursement.reimbursementUpdatec       B      C   s  ddl }ddl}	ddl}
ddlm} ddlm} ddlm} ddl	m
} ddlm}m}m} ddlm} dd	lm} |d
krt|j}|sddg}n ||jfkr|j|jg}n|g}t|}|j }g }y|r2|jdd}|dgkr|jj|j||d|jd}n|jj|j||ddd}|jj|jdd||ddd}|jj|jd|j||ddd}|j||jdddd||jddddB ||jddddB dddddd  j!|jd}|r2g }xd|D ]Z}|d } | |krq|jj| ddd d!d"d#d$d%d&dd'd(d)dd*}!|!r|!d }!|jj|!d d+}"|jj|!d, d+}#|"d j|"d j"d-}$|#d j|#d j#d.}%i }&y@x:|$|!d/ D ](}'|jj|'d+}(|(d j%|&|(d j< qW W n   i }&Y nX |!d0 |!d1  })}*t&|)|	jr|)'d2})n|)dd3 })|j(d4)|) }+d5d4)|) },d6)|*|!d7 }-|
j*+|+|-}.|
j*+|,|-}/g }0|
j*,|.r|
-|.}1x&|1D ]}2|
j*+|/|2}3|0.|3 qtW g }4d8}5dd9lm/}6 |6jj0| d:}7x|7j1 2d;D ]}8d8}9|8j3dkrd<}9n.|8j3dkr|8j4}5d=}9n|8j3d>krd?}9nd@}9|8j5dkr*|8j5'dAnd8}:|8j6dkrf|jj0|8j7d+j%};|;dB |9 dC |: dD }<n|9}<|4.t8|8j4|<dEj9 qW | |!dF |!d3 t:|!dF |$|%|&|0t;|!d t;|!d |!dG dH)|!dI pd8t;|!d0 |d dH)|0|d |d dH)|d t;|!dJ |4dK}=|.|  |.|= qW g }>|d,krTt<|dLdM ddN}>n|dkrpt<|dOdM ddN}>t=t>|?|>d8dPS  t@k
r }? z ddlA}@|@B  t=tCd8d8tD|?S d}?~?X Y nX ntEdQ}At=tCd8d8|AtFS dS )RuC  
        get approve list
        @param approve_status:  ·（required）0:approved&rejected, 1:pending, 2:approved，3：rejected
        @param page_num:        page number(１５items/page)
        @param order_by:        sort(1: apply time，２：approve time), application page default１，approve page default２
        @param source:           data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            {"code": 1, "error": "", "describe": "", "message": "", "data":[{"id": ID, "pin": "emp_code", "name":"first_name",
            "photo":"photo address", "start": "", "end": "", "allowance_type":"", "purpose_type":"", "amount":"", "reimbursement_receipt":"", "remark":"apply reason", "approve_status": ""},]}
        r   N)r=   )models_choices)NodeInstance)ContentType)r>   r   r8   )r   )Q)r   rY                  r   r   Zpayrollr   )0workflow_instance__workflow_engine__content_typenode_engine__approver__in	state__inapprover_admin_idapprover_employee_idT)r   r   r   r   is_next_node)r   Z node_engine__approver_by_overallZdepartmentsr   r   r   r   Fr   )Zflat)Zid__inZworkflow_instance__exception_idZworkflow_instance__employeer   r   r   is_last_node)Zworkflow_instance__employee_id)workflow_abstractException_idr   r9   r]   r^   r\   r`   r   r_   Zemployee__emp_codeZemployee__first_namer@   
audit_time)r   rY   )r   r   )r   r9   r         z%Y-%m-%drM   z/{0}zfiles/reimbursementz{0}/{1}   r"   )r   )exception_idr   ZApprovedZRejectedr   ZRevokeZPendingz%d-%m-%Y %H:%M:%S( ))r   r   	   r   z{0}      )codepinr   photor   r9   r`   r   r   r   r   r   r   approve_statusZapprove_describeZapproved_remarkapproved_timer   c             S   s   | d S )Nr   r   )kr   r   r   <lambda>      z7BioTimeAppReimbursement.approval_list.<locals>.<lambda>)keyreversec             S   s   | d S )Nr   r   )r   r   r   r   r     r  r#   zapprove_status_not_in (0,1,2,3))Gr)   rd   rc   rj   r=   
mysite.attr   mysite.workflow.modelsr   Z"django.contrib.contenttypes.modelsr   r$   r>   r   r8   r   r   django.db.modelsr   r   r   ZAPPLICATIONZAUDITINGr	   Z	flow_roler   r&   Zget_by_natural_keyr'   r   r%   Zvalues_listZdistinctZexcluder   r:   rp   r   r   r   rr   rm   r~   ru   r   r   rq   r   getr   r(   r   r   r   Zapprover_employeer   r   __dict__r   r   sortedr   r   r*   r+   r,   r-   r   r   rn   r   )Br.   r   r   r(   r/   r0   r1   r2   r)   rd   rc   r=   r   r   r   r>   r   r8   r   r   r   Z_approve_statusr3   Z	emp_rolesr   Zct_otZNodeInstance_objZNodeInstance_obj_without_departZNodeInstance_obj_with_departZapprove_nodesZprv_exceptionrr   Z	apply_objr   r9   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zis_rejectedr   workflow_instanceZapprovalr   r   Zemp_nameZfinal_statusZres_dataZdata_filtered_listr6   r,   r   r   r   r   r   7  sF   



&














 z%BioTimeAppReimbursement.approval_listc           
   C   s  ddl m} ddlm}	 ddlm}
 ddlm} ddl}|r||	j	|	j
fkrftd}ttdd|tS t|}|jj|d	}|rzy|d }|j }||	j	krh||_t| d
 |_||_|  |jj|| |
jj|d d}|rxLt|D ]@\}}|}d}|j}|j }|r&P |rd|_|  d}P qW |r||d
  }d|_|  n||	j
kr||_t| d
 |_|  |jj!||j d}|jj|j"d# }|j$ d}xB|D ]:}|j%dkr|j%}|dkr|
jj|j&dj'|d qW dd(tdi}tt)t*+|ddS  t,k
rv } z ddl-}|.  ttddt/|S d}~X Y nX ntd}ttdd|tS ntd}ttdd|tS dS )u`  
        overtime approve
        @param code:                ID
        @param approve_status:      ·(required）audit status(2 : approved/ 3 :rejected)
        @param source:              data source(1: IOS， 2：Android)
        @param device_token:        push message Token
        @param language:
        @param token:
        @rtype:
        r   )r>   )r   )r   )r   NZ!param_approve_status_out_of_ranger"   )r   rY   )Zworkflow_instance__exceptionr   FT)r   r   )r   )r   rb   z{0}OKr#   Zobject_not_foundZobject_id_not_found)0r$   r>   r  r   r  r   r   r   rd   AUDIT_SUCCESSZREFUSErn   r   r   r   r	   r&   r'   rl   audit_reasonr   rw   approverr   r   r   ZworkflowinstanceZapprove_current_node_byr   r(   	enumerater   r   Zreject_current_node_byr   r   r   r   r   r   rm   r   r)   r*   r+   r,   r-   r   ) r.   r   r   r   r/   r0   r1   r2   r>   r   r   r   rd   r   r  objsr    r   Znodesr   r   indexZset_next_nodeZcurrent_noder   Z	next_nodeZstate_r  Znode_setr   r6   r,   r   r   r   approve  s    




 zBioTimeAppReimbursement.approvec             C   s  ddl }ddlm} ddlm}	 ddlm}
m} |jj	|d
 }|r|jj|
krt|}d|j||_||j_|j|_|j  |_||_|  |	jj	|dj|d	 d
dtdi}td}ttt|dd|S td}ntd}|rttddt|S ttddt|S )u*  
        revoke approve
        @param code:            Obj ID
        @param remark:          audit_reason
        @param source:          data source (1: IOS， 2：Android)
        @param device_token:    Push message Token
        @param language:
        @param token:
        @rtype:
        r   N)r>   )AbstractException)r  CANCEL_AUDIT_SUCCESS)r   zRevoke by {0} and Remark is {1})r   )r   rb   z{0}r  Zrevoked_successfulr"   Z$only_approved_records_can_be_revokedZ!workflow_instance_does_not_exists)rd   r$   r>   r  r  r   r  r  r&   r'   r   r   r   r	   rm   r   r  r  rl   r   Z_approve_userr   r   rn   r   r   r)   r*   r   r   )r.   r   r   r/   r0   r1   r2   rd   r>   r  r  r  r    userr   rb   r   r   r   r   revokeP  s.    
zBioTimeAppReimbursement.revokec          
   C   s  ddl m} ddlm} ddlm}	 t|}
|
j}y|jj	|d}|
 }|rh|	||d||dB }d}|prd	}|d	 | }|| }||| }g }|r|d
ddddd}dd |D }ttt|ddS  tk
r } z ddl}|  ttdd|tS d}~X Y nX dS )u5  
        get contact
        @param search_item:     search condition(emp_code or first_name), return all data when this field is None
        @param page_num:        page number(１５items/page)
        @param source:          data source(1: IOS， 2：Android)
        @param device_token:    Token for push message
        @param language:
        @param token:
        @rtype:
            success
                {"code": 1, "error": "", "describe": "", "message": "", "data":[{"code": objcet ID, "pin": "emp_code", "
                name":"first_name", "photo":"photo address", "mobile": "cell phone number ", "email": "email address",
                "position":""}, ]}
            fail
                 {"code": -10001, "error": "", "describe": "exception state", "message": "Pop-up message", "data":""}

        r   )r   )r   )online_employee)r4   )Zfirst_name__icontains)Zemp_code__icontains   rY   r   rx   r   mobileemailposition__position_namec             S   sP   g | ]H}|d  |d |d pd|d p(d|d p2d|d p<dt |d dqS )r   rx   r   r"   r  r  r  )r   r   r   r  r  Zpositionr   )r   )r   r    r   r   r   r!     s   z8BioTimeAppReimbursement.pull_contact.<locals>.<listcomp>r"   N)r  r   Z&mysite.personnel.models.model_employeer   mysite.mobile.utilsr  r	   r4   r&   r'   stripvaluesr   r   r)   r*   r+   r,   r-   r   r   )r.   Zsearch_itemr   r/   r0   r1   r2   r   r   r  r3   r4   r   r   r   r   r   r  r6   r,   r   r   r   pull_contactz  s2    z$BioTimeAppReimbursement.pull_contactN)r   r   r   __doc__r   r   rt   r   r7   r;   floatr   r   r   r   r   r  r  r   r   r   r   r   r      s0   , a0 V" F"R )r   )Zmathr)   rP   Zdjango.utils.translationr   rn   Zdataclassesr   Zmysite.ladon.ladonizerr   r  r   r   r   r   r	   r
   r   r   r   r   r   objectr   r   r   r   r   <module>   s   0