B
    IDbSZ  ã               @   s¸  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 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mZm Z m!Z!m"Z"m#Z# dZ$dZ%dZ&dd„ Z'G dd„ deƒZ(dd„ Z)dd„ Z*dd„ Z+dd„ Z,dd„ Z-dd „ Z.d!d"„ Z/d#d$„ Z0d%d&„ Z1d'd(„ Z2d)d*„ Z3d+d,„ Z4d-d.„ Z5d/d0„ Z6d1d2„ Z7d3d4„ Z8d5d6„ Z9d7d8„ Z:d9d:„ Z;d;d<„ Z<d=d>„ Z=d?d@„ Z>dAdB„ Z?dCdD„ Z@dEdF„ ZAdS )Gé    N)ÚBaseCommand)ÚArea)Ú
Department)ÚEmployee)ÚTransactionÚTerminal)Ú	BreakTime)ÚTimeInterval)ÚAttShift)ÚShiftDetail)ÚAttSchedule)Údb_const)ÚLeaveCategory)ÚEmpPayrollProfileÚOvertimeFormulaÚExceptionFormulaÚLeaveFormulaÚIncreasementFormulaÚDeductionFormulaÚSalaryStructureéd   é   c              C   sH   ddl m}  t}|d kr$tdƒ d S | jj|d}tjj|d ¡  d S )Nr   )ÚCompanyz-pls set CAL_COMPANY_NAME as your company name)Úname__iexact)Úcompany)	Úmysite.cloud.modelsr   ÚCAL_COMPANY_NAMEÚprintÚobjectsÚgetr   ÚfilterÚdelete)r   Úcompany_namer   © r#   úNG:\easytimepro\master/mysite/personnel\management\commands\create_test_data.pyÚdel_old_data   s    r%   c               @   s   e Zd ZdZdd„ ZdS )ÚCommandzinsert test data to databasesc             O   s   t ƒ  tdƒ d S )NZOK)Úcreate_att_cal_datar   )ÚselfÚargsZoptionsr#   r#   r$   Úhandle)   s    zCommand.handleN)Ú__name__Ú
__module__Ú__qualname__Úhelpr*   r#   r#   r#   r$   r&   &   s   r&   c              C   s   ddl m}  t}|d kr$tdƒ d S | jj|d}tjj|d ¡ }t	jj|d ¡ }t
||ƒ}t|ƒ t|ƒ}t|ƒ}t||ƒ t||ƒ d S )Nr   )r   z-pls set CAL_COMPANY_NAME as your company name)r   )r   )r   r   r   r   r   r   r   r    Úfirstr   Ú_create_cal_empÚ_create_cal_transÚ_create_cal_time_intervalÚ_create_cal_shiftÚ_create_shift_detailÚ_create_emp_schedule)r   r"   r   ÚdeptÚareaÚemp_objsÚ
time_tableÚshiftr#   r#   r$   r'   0   s    

r'   c             C   sª   x¤t ddƒD ]–}yjtƒ }||_| |_||_|j|_tj t ddd¡ ¡ |j¡}|j	}|tj
|d |_| ¡  tdƒ W q tk
r  } z|‚W d d }~X Y qX qW d S )Né   é   iä  )Úminuteszsave shift_detail success)Úranger   Ú	day_indexr:   Útime_intervalÚin_timeÚdatetimeÚcombineÚdateÚdurationÚ	timedeltaÚout_timeÚsaver   Ú	Exception)r:   r@   r?   ÚsdrA   rE   Úer#   r#   r$   r4   A   s    r4   c       	      C   s¾   t j  ¡ }trtnd}|t j|d }|t j|d }x‚| D ]z}yNtƒ }||_||_t j|j|j	|j
d|_t j|j|j	|j
d|_| ¡  W q< tk
r´ } z|‚W d d }~X Y q<X q<W d S )Nr   )Údays)ÚyearÚmonthÚday)rB   ÚnowÚCAL_TOTAL_DAYrF   r   Úemployeer:   rD   rM   rN   rO   Ú
start_dateÚend_daterH   rI   )	r8   r:   Údt_nowÚ
total_daysÚdt_startÚdt_endÚeach_empÚa_srK   r#   r#   r$   r5   S   s     

r5   c             C   s*   t | d}d | j¡|_d|_| ¡  |S )N)r   Z	cal_shiftT)r
   ÚformatÚnameÚaliasÚ
auto_shiftrH   )r   r:   r#   r#   r$   r3   f   s
    
r3   c             C   s:   t | d}d | j¡|_tjddd|_d|_| ¡  |S )N)r   Zcal_timetableé   r   )ÚhourÚminuteià  )	r	   r[   r\   r]   rB   ÚtimerA   rE   rH   )r   r9   r#   r#   r$   r2   n   s    
r2   c          
   C   sâ   t rt nd}g }tj ¡ }t |j|j|jd|j¡}t |j|j|jd|j¡}x‚| D ]z}xtt|ƒD ]h}|tj|d }|tj|d }	t	|j
||dd|jd}
t	|j
||	dd|jd}| |
¡ | |¡ qbW qTW t	j |¡ d S )Nr   r_   é   )rL   Ú0r   )Úemp_codeÚempÚ
punch_timeÚpunch_stateÚverify_typer   )rQ   rB   rP   rM   rN   rO   ra   r>   rF   r   re   r   Úappendr   Úbulk_create)r8   rV   Z
trans_objsrU   Út1Út2rf   rO   rA   rG   Ztrans_inZ	trans_outr#   r#   r$   r1   w   s$    




r1   c             C   sz   t rt nd}g }x:td|d ƒD ](}tt|ƒ| t|ƒ| jd}| |¡ q W tj |¡ x|D ]}|g|_| 	¡  q^W |S )Niè  r;   )re   Ú
departmentZ
first_namer   )
ÚCAL_EMP_COUNTr>   r   Ústrr   rj   r   rk   r7   rH   )r6   r7   Úcountr8   Úirf   rK   r#   r#   r$   r0   Œ   s    
r0   c            	   C   s   t dddddddd d S )	Né
   é7   é&   é2   éÈ   é–   é   )Úcompany_countÚ
area_countÚdepartment_countÚdevice_countÚpersonnel_countÚtransaction_countÚadded_company_count)Úcreate_init_datar#   r#   r#   r$   Ú!create_test_data_for_each_company™   s    
r‚   c             C   s   t  d| ¡}|S )Né   )ÚrandomZrandint)Z	thresholdrq   r#   r#   r$   Úcreate_random_countŸ   s    r…   c             C   sþ  dd l }ddlm} ddlm}	 xˆt| ƒD ]z}
|
dkr@d}ndt|
ƒ }|||d ddd	d
|j  ¡ |j  ¡ |jdd dd	 	¡  |j
j|d}t|ƒ td|j d d |j ƒ tt|ƒ|ƒ td|j ƒ tt|ƒ|ƒ td|j ƒ tt|ƒ|ƒ td|j ƒ tt|ƒ|ƒ td|j ƒ tt|ƒ|ƒ td|j ƒ t|ƒ t|ƒ t|ƒ t|ƒ t|tdƒd tƒ  t|ƒ tƒ  |
dkr,|
|kr,|j}t|dƒ q,W |j
jdd ¡  |	j
jdd ¡  |	j
jdd  ¡ }|rú|	j
jdd ¡  d S )Nr   )r   )ÚMyUserÚzktecoZcompany_z.{{ get_main_domain_name }}ZDefaultÚINZ	Bangalorery   iÈ‘ )rL   i–˜ )	r\   Z
sub_domainZ	address_1ZcountryZcityÚpayment_typeZsubscription_start_dateZsubscription_end_dateZmax_employees_limit)r   z>>>create admin: z@zkteco.com zsuccess in company z">>>create area success in company z">>>create dept success in company z$>>>create device success in company z'>>>create personnel success in company z*>>>create transactions success in company r   z	ken.zhongÚdefaultZadmin)ÚusernameZAnonymousUser)!rB   Ú!mysite.cloud.models.model_companyr   Úmysite.accounts.modelsr†   r>   rp   rP   rF   rH   r   r   Úcreate_adminr   r\   Úcreate_arear…   Úcreate_departmentÚcreate_deviceÚcreate_personnelÚcreate_transactionÚcreate_break_timeÚcreate_time_tableÚcreate_shiftÚcreate_shift_detailÚcreate_attscheduleÚcreate_emp_payroll_profileÚcreate_formulaÚcreate_salary_structureÚadd_cpr!   r    Úexists)rz   r{   r|   r}   r~   r   r€   rB   r   r†   Úindexr"   r   Úcurrent_company_nameZhas_anonymous_userr#   r#   r$   r   ¤   s\    r   c       
      C   s²   ddl m} ddlm} ddlm} | jdkrFd}|d| dd	 ¡  n| j}|j}|ƒ }|j	j
| jd
s®|j	j||d ||d}ddlm} |j	j| |dd }	d|	_|	 ¡  dS )u}   
    ç”¨æˆ·åï¼šå…¬å¸å
    é‚®ç®±ï¼šcompany.name + '@zkteco.com'
    å¯†ç ï¼šadmin
    :param company:
    :return:
    r   )Úget_user_model)Úsettings)ÚSystemSettingr‡   z	ken.zhongZemail_settinga3  {"smtp_server": "smtp.zkteco.com", "smtp_server_port": 465, "enable_ssl": true,             "enable_tls": false, "email_account": "zklicense@zkteco.com",              "email_password": "1b834c6068aa8c2190fa577d4e8d8f1ad8bdf7c9ba828bc52405659a7f1d8cb2",               "email_address": "zklicense@zkteco.com"})r\   r   Úvalue)r‹   z@zkteco.com)Znickname)Ú
Membership)r   Úuserr;   N)Zdjango.contrib.authr    Zdjango.confr¡   Úmysite.base.modelsr¢   r\   rH   ZDEFAULT_ADMIN_PASSr   r    Zcreate_superuserr¤   Úget_or_createÚrole)
r   r    r¡   r¢   r‹   ZpasswordZ
class_userZuser_objr¤   Ú
membershipr#   r#   r$   rŽ   æ   s$    
rŽ   c             C   sl   |j dkrd}n|j  d¡d }xFt| ƒD ]:}d| }dt|ƒ d t|ƒ }t|||d}| ¡  q*W d S )	Nr‡   rd   Ú_r;   iè  r7   Ú_cp)Z	area_codeZ	area_namer   )r\   Úsplitr>   rp   r   rH   )rq   r   Úcompany_numrr   Úcoder\   r7   r#   r#   r$   r     s    
r   c             C   sl   |j dkrd}n|j  d¡d }xFt| ƒD ]:}d| }dt|ƒ d t|ƒ }t|||d}| ¡  q*W d S )	Nr‡   rd   rª   r;   iè  r6   r«   )Z	dept_codeZ	dept_namer   )r\   r¬   r>   rp   r   rH   )rq   r   r­   rr   r®   r\   r6   r#   r#   r$   r     s    
r   c             C   sÂ  dd l }|jdkrd}n|j d¡d }ttjj|dƒ}ttjj|dƒ}dd„ tj 	d	¡D ƒ}t
j
 ¡ }|t
jd
d }g }	xÈtdd|  ƒD ]¶}
yˆdt|ƒ d td|
 ƒ }||kr| ¡ }t|d}||_dt|ƒ |_t
 
|j|j|j¡|_t |¡|_|	 |¡ n
td|ƒ W q tk
rD } z|‚W d d }~X Y qX qW tj |	¡ xftdd|  ƒD ]T}
dt|ƒ d td|
 ƒ }tjj||d}tjjt |¡jdg|_|  ¡  qfW d S )Nr   r‡   rd   rª   r;   )r   c             S   s   h | ]}|d  ’qS )r   r#   )Ú.0rr   r#   r#   r$   ú	<setcomp>,  s    z#create_personnel.<locals>.<setcomp>re   r   )rL   Úcp_i † )ÚidZemp_z	pass emp:)re   Údepartment__company)!Úuuidr\   r¬   Úlistr   r   r    r   r   Zvalues_listrB   rP   rF   r>   rp   Zuuid1re   Úemp_namerM   rN   rO   Ú	hire_dater„   Úchoicern   rj   r   rI   rk   r   r²   r7   rH   )rq   r   r´   r­   Z	dept_listÚ	area_listZemp_code_setrU   r·   Úinsert_listrr   re   Úemp_idrf   rK   r#   r#   r$   r’   #  s>    



r’   c             C   s°  t j  ¡ }t   |j|j|jd|j¡}t   |j|j|jd|j¡}tjj|d}| 	¡ }|j
dkrdd}n|j
 d¡d }dd	„ tjj|d
D ƒ}| d }	g }
xtdd| ƒD ]ò}d| d td| ƒ }tjj||dj}xÂtd|	d ƒD ]°}tƒ }||_d|_|t j|d }||_||_d|_d|_||_t |¡|_|
 |¡ tƒ }||_d|_|t j|d }||_||_d|_d|_||_t |¡|_|
 |¡ qèW qªW tj |
¡ dS )u{   
    count ä»£è¡¨æ¯ä¸ªemp æ’å…¥çš„è€ƒå‹¤è®°å½•æ•°ï¼Œ æ¯å¤©ä¸¤æ¡
    :param count:
    :param company:
    :return:
    é	   é   )r³   r‡   rd   rª   r;   c             S   s   g | ]
}|j ‘qS r#   )Úsn)r¯   Údevicer#   r#   r$   ú
<listcomp>`  s    z&create_transaction.<locals>.<listcomp>)r   é   r±   i † )r³   re   )rL   r   N)rB   rP   rM   rN   rO   ra   r   r   r    rq   r\   r¬   r   r>   rp   r   r²   r   re   ri   rF   rg   Zupload_timeZsync_statusrh   r»   r„   r¸   Zterminal_snrj   rk   )rq   r   rU   rl   rm   Zemp_querysetZ	emp_countr­   Zdevice_sn_listrL   rº   rr   r®   r»   rO   ZtranZt_timer#   r#   r$   r“   M  sP    


r“   c       	      C   s€   ddl m} ddlm} ddlm} d |¡}|jj|d}|jj| d}|j	|_
| ¡  |jj||dd }d	|_| ¡  d S )
Nr   )r¤   )r†   )r   z{}@zkteco.com)Zemail)r   )r   r¥   r;   )r¦   r¤   r   r†   rŒ   r   r[   r   r   r²   Zcurrent_companyrH   r§   r¨   )	rŸ   Zadded_company_namer¤   r†   r   Zemail_addressr¥   Zcpr©   r#   r#   r$   rœ   „  s    
rœ   c             C   sÄ   dd„ t jj|dD ƒ}|j}x t| d ƒD ]}ydd | ¡ td| ƒ¡}tƒ }||_	d |t|ƒ¡|_
d|_t |¡|_||_| ¡  td	|ƒ W q, tk
rº } z|‚W d d }~X Y q,X q,W d S )
Nc             S   s   g | ]}|‘qS r#   r#   )r¯   Úar#   r#   r$   rÀ   “  s    z!create_device.<locals>.<listcomp>)r   r;   z{}_{}i áõzcp_{}_device_{}z	127.0.0.1zsave device:)r   r   r    r\   r>   r[   Úupperrp   r   r¾   r¶   Z
ip_addressr„   r¸   r7   r   rH   r   rI   )r¿   r   r¹   r"   rr   r¾   ÚdrK   r#   r#   r$   r‘   ’  s    r‘   c          
   C   s|   | j }yJt| d}d |¡|_tjdd|_tjddd|_| ¡  t	d|ƒ W n& t
k
rv } z|‚W d d }~X Y nX d S )	N)r   zcp_{}_break_timeé   )r`   é   r   )r`   ra   zsave break_time:)r\   r   r[   r]   rB   rb   Zperiod_startZ
period_endrH   r   rI   )r   r"   ZbkrK   r#   r#   r$   r”   ¥  s    
r”   c          
   C   sÞ   | j }yBt| d}d |¡|_tjddd|_d|_| ¡  t	d|ƒ W n& t
k
rn } z|‚W d d }~X Y nX yBt| d}d |¡|_tjd	dd|_d|_| ¡  t	d|ƒ W n& t
k
rØ } z|‚W d d }~X Y nX d S )
N)r   zcp_{}_time_table_1r¼   r   )r`   ra   ià  zsave time_table:zcp{}_time_table_2r_   )r\   r	   r[   r]   rB   rb   rA   rE   rH   r   rI   )r   r"   ZttrK   r#   r#   r$   r•   ´  s&    

r•   c          
   C   sb   | j }y0t| d}d |¡|_d|_| ¡  tdƒ W n& tk
r\ } z|‚W d d }~X Y nX d S )N)r   zcp_{}_shiftTzsave test_shift success)r\   r
   r[   r]   r^   rH   r   rI   )r   r"   ÚsrK   r#   r#   r$   r–   Í  s    
	r–   c             C   sÎ   t jj| dd }tjj| dd }x¤tddƒD ]–}yjtƒ }||_||_||_|j	|_	t
j
 t
 
ddd¡ ¡ |j	¡}|j}|t
j|d |_| ¡  tdƒ W q0 tk
rÄ } z|‚W d d }~X Y q0X q0W d S )N)r   r   r;   r<   iã  )r=   zsave shift_detail success)r
   r   r    r	   r>   r   r?   r:   r@   rA   rB   rC   rD   rE   rF   rG   rH   r   rI   )r   r:   r@   r?   rJ   rA   rE   rK   r#   r#   r$   r—   á  s"    r—   c       
      C   sÚ   t jj| dd }tj ¡ }tj ¡ }|tj|d }|tj|d }xŽ|D ]†}yZtƒ }||_	||_
tj|j|j|jd|_tj|j|j|jd|_| ¡  td|jƒ W qL tk
rÐ }	 z|	‚W d d }	~	X Y qLX qLW d S )N)r   r   )rL   )rM   rN   rO   zsave emp attschedule success:)r
   r   r    r   ÚallrB   rP   rF   r   rR   r:   rD   rM   rN   rO   rS   rT   rH   r   re   rI   )
r   rL   r:   Ú	employeesrU   rW   rX   rY   rZ   rK   r#   r#   r$   r˜   õ  s$    


r˜   c              C   s†   t j ¡ } tj ¡ }xl|D ]d}td|jƒ | j|d ¡ st ƒ }||_d|_	d|_
d|_d|_d|_d|_d|_d	|_| ¡  qW d S )
Nzsave emp payroll profile:)rR   ztest ssnr;   ztest bank nameztest bank accountztest personnel idztest agent idztest agent account)r   r   rÈ   r   r   re   r    r   rR   ZssnZpayment_moder‰   Z	bank_nameZbank_accountZpersonnel_idZagent_idZagent_accountrH   )Zemp_payrollrÉ   rf   rK   r#   r#   r$   r™   
  s     


r™   c       
      C   sâ  xht dddgƒD ]V\}}tjj|d ¡ st| d}||_dtj| d  |_tj| d |_	| 
¡  qW xft d	d
gƒD ]V\}}tjj|d ¡ sxt| d}||_dtj| d  |_tj| d |_| 
¡  qxW tjjdd ¡ s"t| d}d|_dtjd d  |_tjd d |_| 
¡  tj ¡ }xT|D ]L}|j|j }}tjj|d ¡ s2tƒ }	||	_d| |	_||	_|	 
¡  q2W tj ¡  ¡ s°t| d}d|_d|_| 
¡  tj ¡  ¡ sÞt| d}d|_d|_| 
¡  d S )NZot1Zot2Zot3)r\   )r   z#{Basic Salary}/{Required Work}*{%s}r;   r   zlate inzearly leaveZabsentz#{Basic Salary}/{Schedule Days}*{%s}rÁ   )ÚcategoryzMeal increasez{Schedule Days}*50zSocial security deductionÚ500)Ú	enumerater   r   r    r   r\   ÚcZOVERTIME_LEVELZformulaZovertime_levelrH   r   ZEXCEPTION_TYPEZexception_typer   rÈ   r²   Úcategory_namer   rÊ   r   r   )
r   rr   r\   ÚorK   Zleave_categorysZeachZleave_idrÎ   Zleaver#   r#   r$   rš     sN    







rš   c              C   sâ   t j ¡ } tj ¡ }xÈ|D ]À}td|jƒ | j|d ¡ st ƒ }||_t	dƒ|_
tj ¡ |_| ¡  dd„ tj ¡ D ƒ|_dd„ tj ¡ D ƒ|_dd„ tj ¡ D ƒ|_dd„ tj ¡ D ƒ|_d	d„ tj ¡ D ƒ|_| ¡  qW d S )
Nzsave emp salary_structure:)rR   i'  c             S   s   g | ]
}|j ‘qS r#   )r²   )r¯   rr   r#   r#   r$   rÀ   Y  s    z+create_salary_structure.<locals>.<listcomp>c             S   s   g | ]
}|j ‘qS r#   )r²   )r¯   rr   r#   r#   r$   rÀ   Z  s    c             S   s   g | ]
}|j ‘qS r#   )r²   )r¯   rr   r#   r#   r$   rÀ   [  s    c             S   s   g | ]
}|j ‘qS r#   )r²   )r¯   rr   r#   r#   r$   rÀ   \  s    c             S   s   g | ]
}|j ‘qS r#   )r²   )r¯   rr   r#   r#   r$   rÀ   ]  s    )r   r   rÈ   r   r   re   r    r   rR   r…   Zsalary_amountrB   rP   Zeffective_daterH   r   Zovertimeformular   Zexceptionformular   Zleaveformular   Zincreasementformular   Zdeductionformula)Zsalary_structurerÉ   rf   rÇ   r#   r#   r$   r›   M  s     



r›   )BrB   r„   Zdjango.core.management.baser   Z"mysite.personnel.models.model_arear   Z(mysite.personnel.models.model_departmentr   Z&mysite.personnel.models.model_employeer   Z&mysite.iclock.models.model_transactionr   r   Z!mysite.att.models.model_breaktimer   Z$mysite.att.models.model_timeintervalr	   Z mysite.att.models.model_attshiftr
   Z#mysite.att.models.model_shiftdetailr   Z#mysite.att.models.model_attscheduler   Zmysite.payrollr   rÍ   Z%mysite.att.models.model_leavecategoryr   Zmysite.payroll.modelsr   r   r   r   r   r   r   r   ro   rQ   r%   r&   r'   r4   r5   r3   r2   r1   r0   r‚   r…   r   rŽ   r   r   r’   r“   rœ   r‘   r”   r•   r–   r—   r˜   r™   rš   r›   r#   r#   r#   r$   Ú<module>   sX   $

	B%*7/