B
    cbB                 @   s   d dl Z d dl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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ZG dd deZG dd deZ G dd deZ!G dd deZ"e#ee! dS )    N)cache)	ModelFormModelChoiceField)gettext)forms)ActionHandleError)ZKModelAdmin)zk_site)actionsdb_constwidgets)
ImportData)Area)AdminRuntimeWarning)settingsz...c                   sn   e Zd ZejedejdZejedej	dZ
eej edejddZ fddZG d	d
 d
Z  ZS )AreaCreationFormarea_field_code)label
max_lengtharea_field_namearea_field_parentAreaF)querysetr   widgetrequiredc                s   t t| j|| ddlm} | }tjj|j	d
d }|ry8t|j}tjj|d |j	d sz|d | jd _W n tk
r   Y nX d S )Nr   )threadlocals)
company_idid   )	area_coder   r   )superr   __init__Zmysite.baser   Zget_current_userr   objectsfiltercurrent_companyZorder_byZlastintr   existsfieldsinitial	Exception)selfargskwargsr   userobjcode)	__class__ :G:\easytimepro\master/mysite/personnel\admin\area_admin.pyr        s    
zAreaCreationForm.__init__c               @   s   e Zd ZeZdZdS )zAreaCreationForm.Meta)r   	area_nameparent_areaN)__name__
__module____qualname__r   modelr&   r0   r0   r0   r1   Meta-   s   r8   )r4   r5   r6   r   	CharField_r   MAX_AREA_CODEr   MAX_AREA_NAMEr2   r   r   r!   allr   AreaRadioSelectr3   r    r8   __classcell__r0   r0   )r/   r1   r      s   r   c                   sp   e Zd ZejedejddZejedej	dZ
eej edejddZG d	d
 d
Z fddZ  ZS )AreaChangeFormr   T)r   r   r   r   )r   r   r   F)r   r   r   r   c               @   s   e Zd ZeZdZdS )zAreaChangeForm.Meta)r   r2   r3   N)r4   r5   r6   r   r7   r&   r0   r0   r0   r1   r8   9   s   r8   c                s>   t t| j|| t| dd }|r:|jr:d| jd jjd< d S )NinstanceTr   readonly)r   r@   r    getattrpkr&   r   Zattrs)r)   r*   r+   rA   )r/   r0   r1   r    =   s    
zAreaChangeForm.__init__)r4   r5   r6   r   r9   r:   r   r;   r   r<   r2   r   r   r!   r=   r   r>   r3   r8   r    r?   r0   r0   )r/   r1   r@   2   s   r@   c                   sl   e Zd ZejejgZdZeZe	Z
dZdZdZdd Zede_d fd	d
	Zdd Zdd Zdd Z  ZS )	AreaAdmin)
r   r   r2   r3   Zdevice_countZemployee_countZresign_employee_countfingerprintZ
face_countZVLFace_count)r   r2   r3   )r   r2   )Zarea_tree_nodeszarea-parent_area-treezarea-parent_area-mapc             C   sF   ddl m} d|j}t|}|d krBt|t ||}|S |S )Nr   )cal_area_fingerzarea_finger_{})Zmysite.personnel.tasksrG   formatr   r   getsetPLACEHOLDER)r)   r-   rG   Z	cache_keyresZfinger_countr0   r0   r1   rF   O   s    
zAreaAdmin.fingerprintZarea_field_FingerCountNc                s6   i }|dkr| j |d< || tt| j||f|S )z7
        Use special form during user creation
        Nform)add_formupdater   rE   get_form)r)   requestr-   r+   defaults)r/   r0   r1   rP   Z   s
    

zAreaAdmin.get_formc             C   s~   ddl m} t|d| jj| jjd}|  |j}|jrht	j
 }x$|D ]}|j jdkrH|  qHW |rztd|d S )Nr   )r   import_data)req
input_name	app_label
model_name;)django.confr   ImportAreaDataZoptsrV   rW   Zexe_import_data
error_infoZ
ENABLE_ACCr   r!   r=   Zacctimezone_setcountZsave_default_access_datar   join)r)   rQ   r   Z
obj_importZ	ret_errorareasarear0   r0   r1   
dataimportd   s    

zAreaAdmin.dataimportc             C   s>   |j j}|j js| s,tjj|j jd}n| }|	dS )N)r   r3   )
r,   Zget_auth_areaZis_superuserr%   r   r!   r"   r#   r=   Zselect_related)r)   rQ   Z	auth_areaZqsr0   r0   r1   get_querysets   s
    zAreaAdmin.get_querysetc             C   sP   ddl m} |jd}tjj||jjdj	|jj
d}| rL|tdd S )Nr   )r   r   )r   r   )r   z&Area with the same code already exist.)mysite.admin.exceptionsr   Zcleaned_datarI   r   r!   r"   rA   r   Zexcluder   r%   r:   )r)   Z
model_formr   r   Zbkr0   r0   r1   check_domain_rules|   s    zAreaAdmin.check_domain_rules)N)r4   r5   r6   r
   ZImportZSetAreaZlist_displayr   rN   r@   rM   Zlist_filterZsort_fields
cache_keysrF   r:   Zshort_descriptionrP   r`   ra   rc   r?   r0   r0   )r/   r1   rE   D   s   	

	rE   c                   sn   e Zd Zd f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  ZS )rZ   rS   Nc       	         s   ddl m} |j}tj}|d|}|r0|| tt| |||| d | _	|jj
| _td| j	| jf tj d dtd g| _dtd dtd	 dtd g| _g | _d | _d | _d | _d S )
Nr   )activateZlanguagezarea_import_%s_%s   z%sr   r   r   )django.utils.translationre   r,   r   ZLANGUAGE_CODEZget_preferencesr   rZ   r    stampr#   r   r   rJ   datetimenowr:   Zcalculate_fields_verboseZmust_fieldsexist_codesaCodeaNamepaCode)	r)   rT   rU   rV   rW   re   ZprofileZdefault_language_codeZlng)r/   r0   r1   r       s$    
 

zImportAreaData.__init__c       	   	   C   s   |g}x|r|  }|d| x|D ]x}y|| j }W n tk
rP   d}Y nX |r^| p`d}|| j }|rx| pzd}|r&||kr&||krdS || q&W qW dS )Nr    FT)popinsertrn   r(   striprl   append)	r)   elemrecordsstoreZ
check_listZ
check_itemeparent_codea_coder0   r0   r1   is_valid_record   s"    


zImportAreaData.is_valid_recordc          	      s<  dd l }dd l}t j}d jp&d j}dd|dddd}t||	|d xbt
t jD ]P} j| }|d	td
 kr| _|d	td kr| _|d	td krh| _qhW t j j j}| j}	tjj jdddd}
 fdd|	D }dd |
D  _xxt jD ]j\}}||kr"|
| }dg|d  }|d | j< |d pdd| j< |d pxd| j< |	| q"W i }xZt jD ]J\}}|d7 }| j }y| j }W n tk
r   d}Y nX y| j }W n tk
r   d}Y nX |s2 jtdd|i  n,t|tjkr^ jtd|tjd  |rz||krzttdtjj| jd} js|r|rttd|s̈ jtdd|i  n,t|tjkr jtd|tjd  |r*t|tjkr* jtd|tjd  g }  ||	|s\ jtd||d   d!S xFt|D ]:\}}d	| }|!|g }||kr|| |||< qfW ||d"< t"|t"| |d#< d$# jd d% |d&< t||	|d qW |$ }t%j&r$dd'l'm(} t)||d(d) d*}n|*d+d) }| _d,S )-Nr   zarea_import_processor_{0}_{1}ro   z{0}zValidating...r   )statustotalfinishtpfpi,  z%sr   r   r   )r   r   r2   Zparent_area__area_codec                s   g | ]}| j  qS r0   )rl   ).0rw   )r)   r0   r1   
<listcomp>   s    z0ImportAreaData.before_insert.<locals>.<listcomp>c             S   s   g | ]}|d  qS )r   r0   )r   rw   r0   r0   r1   r      s       z/error_data_on_row(%(index)s)_area_code_is_emptyindexzJerror_data_on_row(%(index)s)_the_length_of_area_code_maximum_is_%(length)s)r   lengthz"Self cant be tagged as parent Area)r   r   Z&area_with_the_same_code_already_existsz-the_%(index)s_rows_area_name_can_not_be_emptyzJerror_data_on_row(%(index)s)_the_length_of_area_name_maximum is %(length)szQerror_data_on_row(%(index)s)_the_length_of_parent_area_code_maximum_is_%(length)sznthe_%(index)s_rows_of_data_can_not_be_set_higher_authorities_to_%(index_name)s_sector_or_sub-sector_of_its_own)r   Z
index_nameFr}   r   rX      r[   )
cmp_to_keyc             S   s   t | d t |d  S )Nr   )r$   )x1x2r0   r0   r1   <lambda>      z.ImportAreaData.before_insert.<locals>.<lambda>)keyc             S   s   t | d t |d  S )Nr   )r$   )r   r   r0   r0   r1   r   !  r   T)+jsoncopylenru   rH   rh   r   r   rJ   dumpsrangeheadr:   rl   rm   rn   maxZdeepcopyr   r!   r"   Zvalues_listrk   	enumeraters   
IndexErrorr[   r   r;   r   need_update_old_recordr<   rz   rI   floatr]   itemssixZPY3	functoolsr   sortedsort)r)   r   r   _lenprocessor_keyprocessor_datar   rw   Zmax_lenZall_recordsZ
exist_dataZ	new_codesicZdb_datadataZa_levelrt   ry   Za_namerx   Z
check_arearv   vr   r^   r   r   Z
list_itemsr0   )r)   r1   before_insert   s    









zImportAreaData.before_insertc             C   s   d S )Nr0   )r)   Zinsert_arear0   r0   r1   records_analysis&  s    zImportAreaData.records_analysisc                s  dd l }t| j}d| jpd| j}dd|dddd}t|||d t| j	}i }| j
}d}xN| jD ]B\}	}
x|
D ]
}t|d	kr|d td
| j| jf d }tj }|r||k rt||  dkrP nP |d7 }i }|| j }|| jks|r`xt|D ]}x.| j D ] \}}||kr*|| ||< q*W || jkr||  | j|}| j| }|jr fdd|jD }|r|d  |j}| | }|||< qW | ||}y\tjj|| jd}|r|d }x.| D ]\}}t ||| qW n
tf |}|!  W n4 t"k
r^ } zdd l#}|$  W d d }~X Y nX ||d< t%|t%| |d< t|||d qW x t&t'dg D ]}t(| qW qrW d S )Nr   zarea_import_processor_{0}_{1}ro   z{0}zProcessing...r   )r{   r|   r}   r~   r   i,  r   zarea_import_%s_%s
   c                s    g | ]}|d   kr|d qS )r   r   r0   )r   rw   )	tmp_valuer0   r1   r   S  s    z.ImportAreaData.data_insert.<locals>.<listcomp>)r   r   r}   r   rd   ))r   r   ru   rH   rh   r   r   rJ   r   r   r   rs   rI   ri   rj   absZtotal_secondsrl   rk   r   Zcalculate_fields_indexr   Zvalid_head_indexsr   Zvalid_model_fieldschoicesZattnameZget_db_valueprocess_rowr   r!   r"   setattrsaver(   	traceback	print_excr   rC   rE   delete)r)   r   r   r   r   Zhead_lencalculate_dictZ	overwriter\   levelr^   r_   Zimport_heartrj   Zrow_fields_selectr.   r   kr   Zf_indexZ	tmp_fieldZtvr   valuerow_dataZobjsr-   rw   r   r0   )r   r1   data_insert)  sx    







zImportAreaData.data_insertc             C   s   |    d S )N)r   )r)   r0   r0   r1   sqlserver_insertl  s    zImportAreaData.sqlserver_insertc             C   s   |    d S )N)r   )r)   r0   r0   r1   mysql_inserto  s    zImportAreaData.mysql_insertc             C   s   |    d S )N)r   )r)   r0   r0   r1   oracle_insertr  s    zImportAreaData.oracle_insertc             C   s   |    d S )N)r   )r)   r0   r0   r1   postgresql_insertu  s    z ImportAreaData.postgresql_insertc             C   s   t d| j| jf  d S )Nzarea_import_%s_%s)r   r   rh   r   )r)   r0   r0   r1   after_insertx  s    zImportAreaData.after_insertc             C   s^   dt d }||d}|rZtjj|| jd}|sHt||d}|  n|d }|j|d< |S )Nz%sr   ro   )r   r   )r   r2   r   Zparent_area_id)r:   rI   r   r!   r"   r   r   rD   )r)   r   r   r   rx   parentr-   r0   r0   r1   r   {  s    

zImportAreaData.process_row)rS   NN)r4   r5   r6   r    rz   r   r   r   r   r   r   r   r   r   r?   r0   r0   )r/   r1   rZ      s   tCrZ   )$r   ri   Zdjango.core.cacher   Zdjango.formsr   r   rg   r   r:   Zmysite.adminr   Zmysite.admin.actionr   Zmysite.admin.kernelr   Zmysite.admin.sitesr	   Zmysite.personnelr
   r   r   Zmysite.personnel.import_datar   Zmysite.personnel.modelsr   rb   r   rY   r   rK   r   r@   rE   rZ   registerr0   r0   r0   r1   <module>   s*   A  