B
    by/                 @   s   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 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 G dd deZG dd deZeee dS )    N)cache)gettext_lazy)Q)ActionHandleError)ZKModelAdmin)zk_site)actions)
ImportData)Certification)CertificationForm)AdminRuntimeWarning)settingsc                   sd   e Zd ZdZdZdZdZejgZe	Z
e	Z fddZdd Z fddZ fd	d
Zdd Z  ZS )CertificationAdmin)id	cert_code	cert_name)r   r   c                sb   dt |jkrHg }x(|jD ]}t|j dkrtd}qW |rHt|tt	| 
|||| d S )NZDeleter   ZAsome_certification_still_use_by_personnel_and_cannot_be_cancelled)strZverbose_nameobjectslenZemployeecertification_setfilter_r   superr   response_action_post)selfrequestclsformZaction_instancemessageresult)	__class__ CG:\easytimepro\master/mysite/personnel\admin\certification_admin.pyr       s    z'CertificationAdmin.response_action_postc             C   sH   t |d| jj| jjd}|  |j}|rDddlm} |d|d S )Nimport_data)req
input_name	app_label
model_namer   )r   ;)	ImportCertificationDataZoptsr%   r&   Zexe_import_data
error_infomysite.admin.actionr   join)r   r   Z
obj_importZ	ret_errorr   r    r    r!   
dataimport*   s    zCertificationAdmin.dataimportc                sf   t t| |}yDddlm} |ttjj|j	j
djddd}t|d |d< W n   Y nX |S )Nr   )get_num_from_list)
company_idr   T)Zflat   )r   r   get_changeform_initial_dataZmysite.personnel.utilsr-   listr
   r   r   usercurrent_companyvalues_listmax)r   r   initialr-   Zcert_code_obj)r   r    r!   r0   3   s    
z.CertificationAdmin.get_changeform_initial_datac                s    t t| |j|jjd}|S )N)r.   )r   r   get_querysetr   r2   r3   )r   r   Zqs)r   r    r!   r7   >   s    zCertificationAdmin.get_querysetc             C   sr   ddl m} |jd}|jd}tjt|dt|dB t|jj	d@ j
|jjd}| rn|td	d S )
Nr   )r   r   r   )r   )r   )r.   )r   z@Document with this Document No. or Document Title already exist.)mysite.admin.exceptionsr   Zcleaned_datagetr
   r   r   r   instancer.   Zexcluder   existsr   )r   Z
model_formr   r   r   Zctr    r    r!   check_domain_rulesB   s    z%CertificationAdmin.check_domain_rules)__name__
__module____qualname__Zlist_displayZsort_fieldsZlist_filterZimport_fieldsr   ZImportr   r   Zadd_formr   r,   r0   r7   r<   __classcell__r    r    )r   r!   r      s   
	r   c                   s^   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  ZS )r(   r"   Nc       	         s   ddl m} |j}tj}|d|}|r0|| tt| |||| d | _	|jj
| _dtd dtd g| _dtd dtd g| _g | _d | _d S )Nr   )activateZlanguagez%scertification_field_codecertification_field_name)django.utils.translationrA   r2   r   ZLANGUAGE_CODEZget_preferencesr   r(   __init__stampr3   r.   r   Zcalculate_fields_verboseZmust_fieldsr   r   )	r   r#   r$   r%   r&   rA   ZprofileZdefault_language_codeZlng)r   r    r!   rE   O   s    

z ImportCertificationData.__init__c                s  dd l }ddlm} dd tjj| jjjd	ddD }t
| j}d| jpPd	}d
d|dddd}t|||d tdtdg dd | jD }t fdd|D }|sttdxLtt
| jD ]:}	| j|	 }
|
dtd kr|	| _|
dtd kr|	| _qW xt| jD ]\}	}|	d7 }	d	 }}| j}| jd k	rV|| j }| jd k	rl|| j }|s| jtdd|	i  n,t
||jkr| jtd|	|jd  |s| jtdd|	i  n,t
||jkr| jtd|	|jd  tjj|| jd}| js6|r6|r6ttd |s||kr|r|| |kr| jtd!d|	i d" td#td$tdd%   n|||< td&|r| jtd'd|	i  |	|d(< t |	t | |d)< t|||d q W d*S )+Nr   )db_constc             S   s   i | ]}|d  |d qS )r   r/   r    ).0ir    r    r!   
<dictcomp>g   s    z9ImportCertificationData.before_insert.<locals>.<dictcomp>)r.   r   r   zemp_import_processor_{0} z{0}zValidating...r/   )statustotalfinishtpfpi,  Zdocument_noZdocument_titlec             S   s   g | ]}|  qS r    )lower)rH   itemr    r    r!   
<listcomp>t   s    z9ImportCertificationData.before_insert.<locals>.<listcomp>c             3   s   | ]}| kV  qd S )Nr    )rH   elem)valid_headersr    r!   	<genexpr>u   s    z8ImportCertificationData.before_insert.<locals>.<genexpr>z,Invalid import data,Please check the headersz%srB   rC   z;error_data_on_row(%(index)s)the_certification_code_is_emptyindexzSerror_data_on_row(%(index)s)_the_length_of_certification_code_maximum_is_%(length)s)rW   lengthz:certification_name_%(index)s_rows_of_data_can_not_be_emptyzSerror_data_on_row(%(index)s)_the_length_of_certification_name_maximum_is_%(length)s)r   r.   Z*document_with_the_same_code_already_existszerror_data_on_row(%(index)s)z, z8%(model_name)s with this %(field_label)s already exists.Zpsnl_model_certification)r&   Zfield_labelz[~!@#$%^&*()_+{}":;']+$z"Please enter valid document numberrN   rP   T)!jsonmysite.personnelrG   r
   r   r   r   r2   r3   r4   r   recordsformatrF   r   setdumpsr   headallr   ranger   r   	enumerateneed_update_old_recordr)   appendZMAX_CERT_CODEZMAX_CERT_NAMEr.   intersectionfloat)r   rY   rG   Zname_code_dict_lenprocessor_keyprocessor_dataZheadersr   rW   erT   r   r   	overwriteZ
check_certr    )rU   r!   before_insertd   s    




z%ImportCertificationData.before_insertc                s  ddl m} dd l}t| j}d| jp*d}dd|dddd}t||	|d	 t
jj| jjjd
d}dd |D }|| _| j}t| j}	i }
x\t| jD ]L\}}|| j }i }td| j d }tj }|| jks|rxt|	D ]}x.| j D ] \}}||kr|| |
|< qW || jkr||  | j|}| j| }|jr dkrfq fdd|jD }|r|d  t ||j!s|j"}| #| }|||< qW | $||
 |d |d< t%|d t%| |d< t||	|d	 qW d S )Nr   )modelsz"certification_import_processor_{0}rK   z{0}zProcessing...r/   )rL   rM   rN   rO   rP   i,  )r.   r   c             S   s   g | ]}|d  qS )r   r    )rH   rj   r    r    r!   rS      s    z7ImportCertificationData.data_insert.<locals>.<listcomp>zcertification_import_%s)rK   NNonec                s    g | ]}|d   kr|d qS )r/   r   r    )rH   rj   )	tmp_valuer    r!   rS      s    rN   rP   )&Z	django.dbrm   rY   r   r[   r\   rF   r   r]   r^   r
   r   r   r   r2   r3   r4   
exist_coderc   r_   rb   r   r9   datetimenowra   Zcalculate_fields_indexitemsZvalid_head_indexsrW   Zvalid_model_fieldschoices
isinstanceZ
ForeignKeyZattnameZget_db_valueprocess_rowrf   )r   rm   rY   rg   rh   ri   Z
exist_datarp   rk   Zhead_lencalculate_dictrW   objcodeZobj_dataZimport_heartrr   rI   kvZf_indexZ	tmp_fieldZtvkeyvaluer    )ro   r!   data_insert   sX    







z#ImportCertificationData.data_insertc          
   C   s   dt d }dt d }||}||}y\tjj|| jjjd}|rt|d }x,| D ]\}	}
t	||	|
 qZW n
tf |}|
  W n2 tk
r } zdd l}|  W d d }~X Y nX d S )Nz%srB   rC   )r   r.   r   )r   r9   r
   r   r   r   r2   r3   rs   setattrZsave	Exception	traceback	print_exc)r   Zrow_datarw   ZcodeKeyZnameKeyry   nameZobjsrx   rz   r{   rj   r   r    r    r!   rv      s    


z#ImportCertificationData.process_rowc             C   s   |    dS )u(   
        sqlserver 数据插入
        N)r~   )r   r    r    r!   sqlserver_insert   s    z(ImportCertificationData.sqlserver_insertc             C   s   |    dS )u$   
        mysql 数据插入
        N)r~   )r   r    r    r!   mysql_insert   s    z$ImportCertificationData.mysql_insertc             C   s   |    dS )u%   
        oracle 数据插入
        N)r~   )r   r    r    r!   oracle_insert   s    z%ImportCertificationData.oracle_insertc             C   s   |    dS )u)   
        postgresql 数据插入
        N)r~   )r   r    r    r!   postgresql_insert  s    z)ImportCertificationData.postgresql_insertc             C   s   t d| j  d S )Nzemp_import_%s)r   deleterF   )r   r    r    r!   after_insert	  s    z$ImportCertificationData.after_insert)r"   NN)r=   r>   r?   rE   rl   r~   rv   r   r   r   r   r   r@   r    r    )r   r!   r(   M   s   I2r(   )rq   Zdjango.core.cacher   rD   r   r   Zdjango.db.modelsr   r*   r   Zmysite.admin.kernelr   Zmysite.admin.sitesr   rZ   r   Zmysite.personnel.import_datar	   Zmysite.personnel.modelsr
   Z)mysite.personnel.forms.certification_formr   r8   r   Zdjango.confr   r   r(   registerr    r    r    r!   <module>   s    6 A