B
    ?ca                 @   s  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 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mZ d d	lmZ d d
lmZ d dlmZ d dlmZ dddhZd?ddZdd Zdd Zdd Z dd Z!dd Z"dd Z#dd  Z$d!d" Z%d#d$ Z&d%d& Z'd'd( Z(d)d* Z)d+d, Z*d-d. Z+d/d0 Z,d1d2 Z-d3d4 Z.d5d6 Z/d7d8 Z0d9d: Z1d;d< Z2d=d> Z3ej45e3 dS )@    N)get_user_model)
Permission)ContentType)cache)FieldDoesNotExist)connectionsrouter)signals
ForeignKey)override)settings)cprint)db_constaddchangedeleteTc       	   	   C   s   xp|D ]h}y| j |}W n tk
r0   wY nX || }t|trt|trt|jj||}|d }|||< qW tdd |	 D }| j
jf |}|rt|dkr| f |}|  |g}|S )zb
    search data of object
    :param model:
    :param data:
    :param append:
    :return:
    r   c             S   s&   g | ]\}}| d dt|fqS )Z_id )replacesixZ	text_type).0kv r   8G:\easytimepro\master/mysite/base\management\__init__.py
<listcomp>2   s    z!search_object.<locals>.<listcomp>)_metaZ	get_fieldr   
isinstancer
   dictsearch_objectZreltoitemsobjectsfilterlensave)	modeldataappendZfieldfvalueZsome_objZu_dataobjr   r   r   r      s$    



r   c             C   sN   t | drt | jdsdS t| jd}t|ttfr6nt|rJ|    dS )ze
    check initial_data existent, if it is vacant, then create it
    :param model:
    :return:
    Admininitial_dataN)hasattrr+   getattrr   listtuplecallabler,   )r%   Zdatumr   r   r   #check_and_create_model_initial_data;   s    r2   c              K   sz   ddl }y*ddl}tjjf dd || D }W n tjk
rH   Y n.X td| d|	|j
 d |  dS )z3
    :param kwargs:  query kwargs
    :return:
    r   Nc             S   s   i | ]\}}|d kr||qS ))namer   )r   r   r   r   r   r   
<dictcomp>U   s    z%remove_permission.<locals>.<dictcomp>z[REMOVE] {} within {}codenamered)jsonr   r   r!   get	iteritemsDoesNotExistr   formatdumpscontent_typenatural_keyr   )kwargsr7   r   Zobsolete_permr   r   r   remove_permissionM   s    "r@   c              K   s   ddl m} ddl m} y*ddl}tjjf dd || D  W nl tjk
r   ytjj	f |  W n> ||fk
r } zt
d| d|d	 d
S d}~X Y nX dS Y nX dS dS )zd
    :param kwargs:
    :return:
      * 1 -- inserted
      * 0 -- existed
      * -1 -- error
    r   )ProgrammingError)DatabaseErrorNc             S   s   i | ]\}}|d kr||qS )r3   r   )r   r   r   r   r   r   r4   l   s    z%insert_permission.<locals>.<dictcomp>z$! Failed to insert permission {}: {}r5   r6      )	django.dbrA   rB   r   r   r!   r8   r9   r:   creater   r;   )r?   rA   rB   r   er   r   r   insert_permission_   s    "
rH   c             C   sR   | j }t|r@y
|  W qN tk
r<   ddl}|  Y qNX nt|ttfrNdS )zL
    parse initial_data from admin class
    :param admin:
    :return:
    r   N)r,   r1   	Exception	traceback	print_excr   r/   r0   )adminr,   rJ   r   r   r   admin_initial_data{   s    
rM   c          
      s  ddl m}m} ddl m} |d|td}|d|td}|d|td}	g }
x҈ j d d	 d d d
 D ]}xdD ]}||jkrqrt||d }|d krqr|dkr|r|	s|
	| n|
	 fdd|D  qr|}xB|D ]:}|r|	s|

|j|jf q|
	 fdd|jD  qW qrW qhW td |
}
||
}
|	rt }x|
D ]\}}}d|||}|dkrxt||d qBnN||krBtd6 dj||d}t|||d}|dkr|| W d Q R X qBW |r|
S d S d S )Nr   )hungary_notationget_args_form_dict)remove_duplicate_elements
only_classFneed_returninsert_permsT   rC   )actionsZaction_setsrU   c                s   g | ]}  |qS r   )
get_action)r   action)rL   r   r   r      s    z,handle_action_permission.<locals>.<listcomp>c                s   g | ]}  |qS r   )rV   )r   rW   )rL   r   r   r      s    z{0}_{1})ZGeneralActionDeleteZGeneralActionNew)r=   r5   ZenzCan {verb} {target})verbtarget)r=   r3   r5   )Zmysite.admin.utilsrN   rO   rP   bool	__class__mro__dict__r.   extendr'   r3   clsr"   setr;   r@   r   rH   r   )rL   r=   
model_namer?   rN   rO   rP   rQ   rR   rS   rU   klassZattr_keyZclass_actionsZclass_action_setsZ
action_setseenZ_klassr3   Zdesc	code_name
human_nameZretr   )rL   r   handle_action_permission   sP    "


&



	
rf   c             C   s   d| }t | |d d S )NZbrowse_)r=   r5   )r@   )ctra   rd   r   r   r   "_remove_obsolete_browse_permission   s    rh   c             C   s$   d| }d |}t| ||d d S )NZview_zCan view {})r=   r5   r3   )r;   rH   )rg   ra   rd   re   r   r   r   _insert_view_permission   s    
ri   c              K   s  ddl m} ddlm} | d}| d}tjtj }}t| }t	 }|j
j|dsr|j
j|d||d}	t|	 ttd	dd
krd}|j
j|ds|j
j|d||d}	t|	 |tj xtj||jddD ]}
|
jjs|
jjs|
jjsqtj
|
}| \}}t|| |
jj}|dkr$d}|rBtt| }t|| n
tdhB }x&|D ]}d||}t ||d qRW t!|
 |
|j"kr|j"|
 }t#|drt$| t%||| qW d S )Nr   )activate)zk_site
app_configZusing)usernamezadmin@zkteco.com)ZnicknameZDEMOrD   Zdemozadmin@zkteco.inF)Zinclude_auto_createdgroup)r   r   viewro   z{}_{})r=   r5   r,   )&django.utils.translationrj   Zmysite.admin.sitesrk   r8   r   ZDEFAULT_ADMIN_NAMEZDEFAULT_ADMIN_PASSr   r   r!   r"   Zcreate_superusercreate_admin_membershipr.   ZLANGUAGE_CODEr   Zget_migratable_modelsaliasr   ZswappedZabstractZmanagedr   get_for_modelr>   rh   default_permissionsDJANGO_NATIVE_PERMISSIONr`   ri   r;   r@   r2   	_registryr-   rM   rf   )r?   rj   rk   rl   Zdbrm   ZpasswordZ
connectionZ
class_userZuser_objr%   r=   
_app_labelra   rt   Zextraneous_permissionZperm_prefixrd   rL   r   r   r   maintain_model_initial_data   sN    








rx   c           	   K   s   ddl m} ddlm} | dd}t|ts2d}d}xt|j	D ]\}}t
j|}| \}}	|j||	d}
|rxnt|
d }|d k	rqDt|||	dddd}t|
| |d	7 }td
||
d qDW d S )Nr   )rk   )ACTION_CACHE_KEYforce_updateF)Zappr%   T)rQ   rR   rS   rD   z%INFO: {:03} {} cache has been updatedgreen)Zmysite.adminrk   Zmysite.admin.constry   r8   r   rZ   r   r9   rv   r   r!   rs   r>   r;   r   rf   r`   r   )r?   rk   ry   rz   Zcntr%   rL   r=   rw   ra   Zaction_cache_keyrU   r   r   r   maintain_action_cache  s*    
r|   c              K   s   ddl m}m} ddlm} | dd}ttj}|dk	}|dkrH|S |dkrT|S |d	kr|d
krx|dk	rxt	tj |dkr|rdS t
jj|d|dd| ddjddd}ttjt|d t|S dS )zO
    maintain perms cache in cache backend
    :param kwargs:
    :return:
    r   )Value	CharField)Concatopr   NcheckZfetch)updater`   r   r`   FZcontent_type__app_label.r5   )Zoutput_field)the_custom_keyr   T)ZflatiQ )django.db.modelsr}   r~   Zdjango.db.models.functionsr   r8   r   r   ZCACHE_KEY_PERMr   r   r!   ZannotateZvalues_listr`   	frozenset)r?   Vr~   r   r   _cacheZ_validZcurrent_existent_permsr   r   r   maintain_perms_cache1  s&    
r   c             C   s6   ddl m} |jj|  | dd }d|_|  d S )Nr   )
Membership)companyuserrD   )mysite.base.modelsr   r!   get_or_createZget_current_companyZroler$   )r*   r   Z
membershipr   r   r   rq   M  s    rq   c              C   sz   dd l } ddlm} |j  }|dkrv|tjtjtj	tj
tjtjd| j  | j  | jdd dddddd	  d S )
Nr   )Company   iȑ )Zdaysi i'  i@B )idr3   Z
sub_domainZ	address_1ZcountryZcityZpayment_typeZsubscription_start_dateZsubscription_end_dateZmax_employees_limitZmax_devices_limitZmax_transactions_limitZmax_mobile_applications_limitZmax_whatsapp_push_limit)datetime!mysite.cloud.models.model_companyr   r!   allcountr   DEFAULT_COMPANY_IDZDEFAULT_COMPANY_NAMEZDEFAULT_COMPANY_DOMAINZDEFAULT_COMPANY_ADDRESS1ZDEFAULT_COMPANY_COUNTRYZDEFAULT_COMPANY_CITYZnowZ	timedeltar$   )r   r   r   r   r   r   create_first_companyT  s&    r   c           #   C   s  dd l } ddlm} 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d
lm} ddlm}m} ddlm} ddlm} ddlm} ddlm} ddlm } ddl!m"} ddl#m$} ddl%m&} |j'j(t)j*d}|sd S |d }|j'j(|d+ dkr||dd|d dd,  ||d|ddd,  ||dd|d dd,  ||dd|d dd ,  ||d!t-|j./d"d# t01|	d$,  x$|D ]}|f d%|i|,  qW ||d&d'd&t01|t01|d(j,dd) ||d*d| 2d+ddd,d,d,d,d-d&d&ddd&dd,dd,ddddddd-dd| 2ddd| 2d.dd| 2d/dddd0,  ||d1d&d&ddddddd2
,  ||d3d&d&ddddddd2
,  t01|
}d4|t-|j./d"d#d5}||j3j4|\}}||| ||j'j5|j.dd,  d S )6Nr   )gettext_lazy)Area)
Department)Position)Location)AttRuleLeaveCategoryAttReportSetting)DEFAULT_ATT_RULE_PARAMS)DEFAULT_REPORT_PARAMS)DEFAULT_LEAVE_DATA)	FUNC_KEYS	ATT_ITEMS)TimeInterval)AttShift)DeviceConfig)	customSql)ReportParam)getSQL_insert_new)r   )SystemSetting)r   )r   1z%sZarea_name_defaultValueT)r   Z	area_codeZ	area_name
is_defaultZdefault_department)r   Z	dept_codeZ	dept_namer   Zposition_default_value)r   Zposition_codeZposition_namer   Zlocation_default_value)r   Zlocation_codeZlocation_namer   Zglobal_att_rule_-r   )r   
param_nameparam_valuer   rD      )r   Z
resign_empZ
short_dateZ
short_timefunc_keyZatt_item)Zforce_insertzGeneral Time Table	   <   i        )r   rr   Zuse_modeZin_timeZin_ahead_marginZin_above_marginZout_ahead_marginZout_above_marginZdurationZin_requiredZout_requiredZ
allow_lateZallow_leave_earlyZwork_dayZearly_inZmin_early_inZlate_outZmin_late_outZovertime_lvZovertime_lv1Zovertime_lv2Zovertime_lv3Zmultiple_punchZavailable_intervalZwork_time_durationr   Z	work_typeZ
day_changeZfirst_half_out_timeZsecond_half_in_timer   zGeneral Shift)
r   rr   Z
cycle_unitZshift_cycleZwork_weekendZweekend_typeZwork_day_offZday_off_typeZ
auto_shiftr   ZWeekoffZreport_setting)r   r   
company_id)6r   rp   r   Z"mysite.personnel.models.model_arear   Z(mysite.personnel.models.model_departmentr   Z&mysite.personnel.models.model_positionr   Z&mysite.personnel.models.model_locationr   Zmysite.att.modelsr   r   r   Zmysite.att.models.model_attruler   Z#mysite.att.models.model_reportparamr   Z%mysite.att.models.model_leavecategoryr   Z%mysite.att.models.model_reportsettingr   r   Z$mysite.att.models.model_timeintervalr   Z mysite.att.models.model_attshiftr   mysite.iclock.modelsr   Zmysite.utilsr   r   Zmysite.core.zktoolsr   r   r   r   r   r!   r"   r   r   r   r$   strr   r   r7   r<   timer   Zdb_tabler8   )r   _r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Zobjsselfr&   valZinsert_report_paramZsqlZparamsr   r   r   create_default_valuej  s    





r   c              C   s  ddl m}  ddlm}m}m} ddlm} ddlm	} ddl
m} | jjdd}|jjd	d
 sz|jjf d|i| |j  sx|D ]}|jjf | qW |j  sxN|D ]F}	|jjf |jjd	d
|d|	}
x|j D ]}|
j| qW qW d S )Nr   )MyUser)DiscountFeaturePriceStrategy)DEFAULT_DISCOUNT_PARAMS)DEFAULT_FEATURE_PARAMS)DEFAULT_PRICE_STRATEGY_PARAMSrL   )rm   g        )Zdiscount_ratiocreate_user)Zdiscountr   )Zmysite.accounts.modelsr   mysite.cloud.modelsr   r   r   Z"mysite.cloud.models.model_discountr   Z!mysite.cloud.models.model_featurer   Z(mysite.cloud.models.model_price_strategyr   r!   r8   r"   existsrF   r   featurer   )r   r   r   r   r   r   r   r   r   Zprice_strategyZpsr(   r   r   r   3create_default_discount_features_and_price_strategy  s&    

r   c           	   C   s   ddl m}  ddlm} ddlm} | j }x|D ]}|jjd dj|j	d}y|j
|j	d W n tk
rv   Y nX |jjd dj|j	d}y|j
|j	d W q4 tk
r   Y q4X q4W d S )Nr   )r   )Employee)Transaction)r   )Zdepartment__company_id)Zemp__company_id)r   r   mysite.personnel.modelsr   r   r   r!   r   r"   r   r   rI   )r   r   r   Zcompanysr   empstransr   r   r   cloud_add_company_id  s    

r   c              C   s   ddl m}  ddlm} d}| jjd d}y|j|d W n tk
rN   Y nX |jjd d}y|j|d W n tk
r   Y nX d S )Nr   )r   )r   z$6b969e80-f3ff-11e9-afc7-acde48001122)r   )r   r   r   r   r!   r"   r   rI   )r   r   r   r   r   r   r   r   enterprise_add_company_id#  s    r   c               C   s   t jrt  nt  dS )z$for add company_id to employee tableN)r   CLOUD_VERSIONr   r   r   r   r   r   add_company_id_to_emp_trans3  s    r   c           	   C   sP   t jtjd} tjd }t| d"}y|| W n   Y nX W dQ R X | S )zU/files/conn_logs.zk dont rename or change,this file is used by bioCat to check resultzconn_logs.zkz connection is successfulwN)ospathjoinr   ADDITION_FILE_ROOTZDATABASE_ENGINEopenwrite)fnsr(   r   r   r   saveToResult;  s    
r   c             C   s   ddl m} i }xt| D ]}|dd}t|dkr:q|\}}||d }|s~|jj|d}|	 r|
 j}|||< nqtj| |}	tj	|	st|	 tj|	|}
tj| |}t||
 qW d S )Nr   )r   r   rD   rT   )r3   )r   r   r   listdirsplitr#   r8   r!   r"   r   firstZhex_idr   r   makedirsshutilmove)r   r   Zcompany_name_to_idr(   Zsupported_photoZcompany_nameZ
photo_namer   Zcompany_objnew_pathnew_fileold_filer   r   r   move_photo_from_pathH  s(    


r   c              C   s   d tjd} tj tjd}tj || }tj tjd}tj || }tj|sdt| tj|szt| t	| t	| d S )Nr   r   ZbiophotoZphoto)
r   r   r   r   r   r   r   r   r   r   )Zdefault_company_idZbio_orig_pathZdefault_company_biophoto_pathZphoto_orig_pathZdefault_company_photo_pathr   r   r   move_photos`  s    

r   c              C   s   ddl m}  ddlm}m}m}m} ||||d}xT|  D ]H}|\}}}	|| }
dj|	|d}d|	|}|
j	j
|d|id	\}}q<W d S )
Nr   )no_model_permissions)ReportPermissionSystemSettingPermissionAttSettingPermissionPayrollReportPermission)Zatt_settingZreportZsystem_settingZpayroll_reportzCan {verb} {target})rX   rY   z{}_{}r3   )r5   defaults)Zmysite.admin.dispatchersr   Zmysite.base.models.modellessr   r   r   r   Zget_permissionsr;   r!   r   )r   r   r   r   r   Znon_model_dictZpermcategoryrY   rX   Z
perm_proxyre   r5   r*   Zcreatedr   r   r   process_extra_permissionn  s    
r   c           	   K   s   yddl m} tdd t  tf |  tjdkrtdd t	dd	 t
d
d t  dt_t  t  t  |jr|t  t  W n8   tj|jd}yt| W n   Y nX Y nX td dS )z
    :param kwargs:
        sender=app_config,
        app_config=app_config,
        verbosity=verbosity,
        interactive=interactive,
        using=db,
    :return:
    r   )r   Zuse_default_dbrD   Nz3update permissions. (it shall run merely one time.)r{   r   )r   T)rz   Fzconn_logs.zk)django.confr   r   r`   r   rx   r   ZPERM_FIRST_TIME_SETr   r   r|   r   r   r   r   r   r   r   r   r   r   r   remover   )r?   r   r   r   r   r   post_syncdb_initial_data  s0    






r   )T)6r7   r   r   r   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Z"django.contrib.contenttypes.modelsr   Zdjango.core.cacher   Zdjango.core.exceptionsr   rE   r   r   r   r	   r
   rp   r   r   r   Zmysite._utilsr   Zmysite.baser   ru   r   r2   r@   rH   rM   rf   rh   ri   rx   r|   r   rq   r   r   r   r   r   r   r   r   r   r   r   Zpost_migrateZconnectr   r   r   r   <module>   sP   

?3 '