B
    ZcJ                 @   s   d dl Z d dlZd dl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mZmZ d d
lmZ d dlmZmZ d dlmZ G dd dejZG dd dejZ G dd dejZ!G dd dejZ"dS )    N)DecimalInvalidOperation)settings)cache)OrderedDict)gettext_lazy)serializers)ValidationError)SystemSettingAutoExportTask	DbMigrate)tasks)aes_encryptaes_decrypt)get_ad_connectionc               @   s*   e Zd Ze Zdd ZG dd dZdS )SystemSettingDataSerializerc             C   s   |j S )N)value)selfobj r   4G:\easytimepro\master/mysite/base\api\serializers.py	get_value   s    z%SystemSettingDataSerializer.get_valuec               @   s   e Zd ZeZdZdS )z SystemSettingDataSerializer.Meta)namer   N)__name__
__module____qualname__r
   modelfieldsr   r   r   r   Meta   s   r   N)r   r   r   r   ZSerializerMethodFieldr   r   r   r   r   r   r   r      s   r   c               @   sz   e Zd ZG 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S )SystemSettingSerializerc               @   s   e Zd ZeZdZdS )zSystemSettingSerializer.Meta)r   r   N)r   r   r   r
   r   r   r   r   r   r   r   $   s   r   c             C   s~  ddl m} ddlm} |dd }t|dd}|dd }|dd }|d	d r\d
nd}|dd rpd
nd}	|sttdd|sttdd|sttddy"||||||	|dd}
|
  W n |k
rH } z\|}dddg}x>|D ]6}y|	|}W n t
k
r   wY nX t|dqW t|dW d d }~X Y n2 t
k
rx } z|}t|dW d d }~X Y nX d S )Nr   )get_connection)SMTPAuthenticationErrorsmtp_serverZsmtp_server_port   Zemail_accountemail_passwordZ
enable_sslTFZ
enable_tlsZstmp_server_is_required)detailZemail_account_is_requiredZemail_password_is_required)hostportZusernamepasswordZuse_tlsZuse_sslZfail_silentlyzutf-8ZGB2312ascii)Zdjango.core.mailr    Zsmtplibr!   getintr	   _opendecode	Exception)r   paramsr    r!   r&   r'   userr(   ZsslZtlsZ
connectioneZ	error_msgZdecode_listZdecode_tempr   r   r   smtp_validate(   s>    

z%SystemSettingSerializer.smtp_validatec             C   s   t |}|sttddd S )NadServer_testConnection_fail)r%   )r   r	   r,   )r   r0   Zconnr   r   r   ad_validateI   s    z#SystemSettingSerializer.ad_validatec                s2  ddl m} ddlm} ddlm} |dd }|dd }|dd }|dd }|d	d }	|d
d }
||||	|
|g}||}x6| D ]*}|d d k	r|d dkrtt	ddqW |d| j
d jj}|stt	ddd||  stt	ddt fdd|D }|s.tt	ddd S )Nr   )Counter)get_system_setting)get_all_ad_attributesemp_code
first_nameemail_address	dept_code	dept_namemobile_number   Z&please_check_the_duplicate_field_value)r%   ad_server_settingrequestsettings_is_not_configuredz	AD Serverr4   c             3   s   | ]}| kV  qd S )Nr   ).0Z	attribute)all_ad_attributesr   r   	<genexpr>f   s    z<SystemSettingSerializer.ad_field_validate.<locals>.<genexpr>Zad_fields_does_not_match)collectionsr6   mysite.utilsr7   mysite.base.views.intergrationr8   r*   itemsr	   r,   contextr1   current_companyformatall)r   r0   r6   r7   r8   r9   r:   r;   r<   r=   r>   Zdefault_valueZ
field_datavad_server_paramsZattribute_checkr   )rD   r   ad_field_validateN   s.    z)SystemSettingSerializer.ad_field_validatec             C   sn   ddl m} ddlm} | jd jj}|d|}|d|}|sLttdd|s^ttd	d|||| d S )
Nr   )r7   )sync_ad_server_datarA   r@   Zad_field_settingZad_server_not_configured)r%   Zplease_submit_the_form)	rG   r7   rH   rQ   rJ   r1   rK   r	   r,   )r   r0   r7   rQ   
company_idrO   Zad_field_paramsr   r   r   ad_manual_sync_settingj   s    

z.SystemSettingSerializer.ad_manual_sync_settingc             C   s   dd l }|dd }|s&ttddy4|j|s>|| |j|sXttddW n" tk
r|   ttddY nX d S )Nr   backup_store_pathZstore_path_is_required)r%   Zstore_path_is_wrong)osr*   r	   r,   pathexistsmakedirsr/   )r   r0   rU   Z
store_pathr   r   r   db_backup_validatev   s    
z*SystemSettingSerializer.db_backup_validatec       
   	   C   s   dd l }dd l}ddlm} |d}|r|jtjsD|	tj |
d\}}|| jd jj}t|d}	|	|| W d Q R X d S )Nr   )get_real_company_logo_nameZlogo_img,rA   wb)rU   base64Zmysite.base.utilsrZ   r*   rV   rW   r   ZCOMPANY_LOGO_STORE_PATHmkdirsplitrJ   r1   rK   r-   writeZ	b64decode)
r   r0   rU   r]   rZ   Zcompany_logZimg_infoZimg_codeZreal_company_logo_namefr   r   r   company_validate   s    
z(SystemSettingSerializer.company_validatec             C   sZ  | dd}| dd}| dd}| dd}| dd}| dd}| dd}| d	d}	| d
d}
|rtd|}|sttd|s|s|s|s|rVddlm} |jj | jd j	j
d}||_||_||_||_||_||_|  td|j|	 td|j|
 td|j| td|j| td|j| d S )Ncompany_cnr company_phonecompany_addresscompany_countrycountry_namecompany_provincecompany_citycompany_latitudecompany_longitudezO^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{4})(?: *x(\d+))?\s*$Z$company_info_phone_number_validationr   )CompanyrA   )idz{}_geolocation_info_latitudez{}_geolocation_info_longitudez{}_geolocation_info_countryz{}_geolocation_info_provincez{}_geolocation_info_city)r*   refindallr	   r,   Zmysite.cloud.modelsrm   objectsrJ   r1   rK   rc   re   ZcountryZprovinceZ	address_1ZcityZsaver   setrL   r   )r   r0   rc   re   rf   rg   rh   ri   rj   rk   rl   checkrm   Zcompany_objr   r   r   company_info_validate   s8    z-SystemSettingSerializer.company_info_validatec             C   s<   ddl m} | }|r4t|}|j|d< t|S |S d S )Nr   )get_current_userZuser_id)Zmysite.base.threadlocalsru   jsonloadsrn   dumps)r   r0   dataru   Zcurrent_userr   r   r   sms_whatsapp_validate   s    


z-SystemSettingSerializer.sms_whatsapp_validatec          
   C   s   | dd}| dd}| dd}| dd}yD|r>t|nd}|rNt|nd}|r^t|nd}|rnt|nd}W n0 tk
r } zttddW d d }~X Y nX d S )Nhigh_temp_minrd   high_temp_maxwarn_temp_minwarn_temp_maxZtemperature_field_validation)r%   )r*   r   r   r	   r,   )r   r0   r{   r|   r}   r~   r2   r   r   r   td_md_validate   s    z&SystemSettingSerializer.td_md_validatec          
   C   s@  dd l }ddlm} ddlm} t|}d|krd|kry"tt	|d }|rZ||d< W n0 |j
tfk
r } zt| W d d }~X Y nX | | d|krt|d trt|d dd|d< t|d d|d< t|}n~d|kr| | nhd	|kr| | nPd
|kr@| | d|krd| | n$d|krX| | nd|krn| | nd|kr|drdtj|d|d< tj|d std|d  dt|}nd|krd|d| jd j j!}|sd}	n|dd}	|"dd "ddd }
|	|
#ddkrd||ddd}d|
 }d| d}|#||}d|krt$j%j&| jd j j!dd}|' stt(d)d dd!|krt$j%j&| jd j j!d"d}|' stt(d)d#dd$|kr*t$j%j&| jd j j!d%d}|' s*tt(d)d&d| *| |#d'd(S ))Nr   )r7   )	zkEncryptr"   r$   zutf-8)encodingrT   Z	ad_serverZenable_syncZmanual_syncZcompany_nameZtem_unitZ
photo_pathz"%s" not exists)r%   Zauto_mail_triggerreport_settingrA   rd   admin_passwordz"admin_password":r?   r[   "Zbiotimez"admin_password":"Zemail_alertZemail_setting)rR   r   rB   ZEmailZ	sms_alertZsms_settingZSMSZwhatsapp_alertZwhatsapp_settingZWhatsAppz"on"true)+binasciirG   r7   Zmysite.zkauthr   rv   rw   r   strencodeError
ValueErrorprintr3   
isinstancebytesr   r.   rx   rY   r5   rP   rS   rb   r   r*   rU   rV   abspathisdirr	   rJ   r1   rK   r_   replacer
   rq   filterrW   r,   rL   rt   )r   ry   r   r7   r   r0   Zde_passwordr2   r   Zadmin_password_dbr   Zencrypted_passwordZ	plain_pwdZencrypted_pwdZemail_settingsZsms_settingsZwhatsapp_settingsr   r   r   validate_value   s|    

















z&SystemSettingSerializer.validate_valuec             C   s   | j d j |d< |S )NrA   Zcompany)rJ   r1   Zget_current_company)r   datasr   r   r   validate  s    z SystemSettingSerializer.validatec             C   sz   ddl m} |d }| jd jj}dtj||f }|| tj	j
||d}|rh|j|d d |d S tj	jf |}|S )	Nr   )r   r   rA   z%s_%s_%s)r   rR   r   )r   )django.core.cacher   rJ   r1   rK   r   ZUNITdeleter
   rq   r   updatecreate)r   validated_datar   Zp_nameZcurr_companyZ	cache_keyobjsr   r   r   r   r     s    
zSystemSettingSerializer.createN)r   r   r   r   r3   r5   rP   rS   rY   rb   rt   rz   r   r   r   r   r   r   r   r   r   "   s   !
Cr   c               @   s"   e Zd ZG dd dZdd ZdS )AutoExportTaskSerializerc               @   s   e Zd ZeZdZdS )zAutoExportTaskSerializer.Meta)rn   r0   N)r   r   r   r   r   r   r   r   r   r   r     s   r   c             C   s^  dd l }ddlm} ddddddd	d
ddddddg}t|}|d }|d}|d}|d}	|||}
x&|
D ]}||krv|td| dqvW |dd }|dd }|dd 	d}|dd}|r|
||s|tdd|r
| s
|tddx0|D ](}|r|
|	|s|tddqW |rZ| sZ|tdd|S ) Nr   )r	   r9   r:   	last_namer<   r=   Z
punch_timeZverify_typeZ	work_codeZcard_numberZ	area_nameZterminal_aliasZterminal_snZtemperatureZ	mask_flagZdata_templatez{(\w+)}z?^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$z!^([01][0-9]|2[0-3]):([0-5][0-9])$zautoExport_task_error_data: )r%   Zexport_emailintervalZexport_time;Zmin_len_emp_codeZautoExport_task_error_emailZautoExport_task_error_intervalZ autoExport_task_error_time_pointZ0autoExport_task_min_len_emp_code_should_be_digit)ro   rest_framework.exceptionsr	   rv   rw   compilerp   r,   r*   r_   matchisdigit)r   r0   ro   r	   Ztemplate_listr   Ztem_templateZ_paramZemail_reZtime_point_remitemZ	tem_emailZtem_intervalZtem_time_pointZtem_min_len_emp_codetpr   r   r   validate_params   s6    





z(AutoExportTaskSerializer.validate_paramsN)r   r   r   r   r   r   r   r   r   r     s   r   c               @   s*   e Zd ZG dd dZdd Zdd ZdS )DbMigrateSerializerc               @   s   e Zd ZeZdZdS )zDbMigrateSerializer.Meta)r   r   N)r   r   r   r   r   r   r   r   r   r   r   @  s   r   c             C   s   t |}|dd }|dd }|dd }|dd }|dd }|dd }|dd }	|dd }
|d	d }|d
d }|dd }|dd }|s|r|r||krttdd|sttddq|sttddn|sttdd|dkr|sttddnl|s,ttddnV|sBttddn@|sXttddn*|	snttddn|
sttdd|||||	|
|d}y0ddlm} ||dd}|rttddW n4 tk
r   dd l}|	  ttddY nX |S ) Nis_testZmigrate_software_typemigrate_database_typemigrate_database_addressmigrate_database_portmigrate_database_namemigrate_database_usermigrate_database_passwordZmigrate_database_tablesZmigrate_transaction_startZmigrate_transaction_endmigrate_sqlite_databaseZ&migrate_transaction_time_invalid_range)r%   Zsoftware_category_is_requiredZmigrate_fields_is_requiredZ!migrate_database_type_is_required)ZsqliteZmigrate_sqlite_file_is_requiredZ$migrate_database_address_is_requiredZ!migrate_database_port_is_requiredZ!migrate_database_name_is_requiredZ!migrate_database_user_is_requiredZ%migrate_database_password_is_required)r   r   r   r   r   r   r   r   )	test_connT)testZdbMigrate_testConnection_failZ"dbMigrate_testConnection_exception)
rv   rw   r*   r	   r,   rH   r   r/   	traceback	print_exc)r   ry   r0   r   Zsoftware_categoryZsoftware_databaseZdatabase_addressZdatabase_portZdatabase_nameZdatabase_userZdatabase_passwordZmigrate_tablesZtrans_startZ	trans_endZsqlite_filer   msgr   r   r   r   r   D  sj    

z"DbMigrateSerializer.validate_valuec             C   sN   t jj|d d}|r0|j|d d |d }nt jjf |}tj| |S )Nr   )r   r   )r   r   )r   rq   r   r   r   r   Zmigrate_taskZdelay)r   r   r   r   r   r   r   r   ~  s    
zDbMigrateSerializer.createN)r   r   r   r   r   r   r   r   r   r   r   ?  s   :r   )#rv   rU   ro   Zdecimalr   r   Zdjango.confr   r   r   rF   r   Zdjango.utils.translationr   r,   Zrest_frameworkr   r   r	   Zmysite.base.modelsr
   r   r   Zmysite.baser   Zmysite.tools.encryption_utilsr   r   rH   r   ZModelSerializerr   r   r   r   r   r   r   r   <module>   s$    z$