B
    )ec4                 @   sl  d dl Z d dl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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 Z%e%dd Z&e%dd Z'e%dd Z(e%dd Z)dpddZ*dd Z+ed d! Z,ed"d# Z-e%d$d% Z.e%d&d' Z/dqd(d)Z0e%d*d+ Z1d,d- Z2ed.d/ Z3ed0d1 Z4e%d2d3 Z5d4d5 Z6e%d6d7 Z7d8d9 Z8e%d:d; Z9e%d<d= Z:e%d>d? Z;d@dA Z<dBdC Z=edDdE Z>e%dFdG Z?e%dHdI Z@dJdK ZAdLdM ZBdNdO ZCdPdQ ZDdRdS ZEdTdU ZFedVe&ddWedXe'ddWedYe(ddWedZe)ddWed[e,d!dWed\e-d#dWed]e.d%dWed^e1d+dWed_e2d-dWed`e3d/dWedae5d3dWedbe7d7dWedce/d'dWedde4d1dWedee8d9dWedfe;d?dWedge9d;dWedhe:d=dWedie>dEdWedje?dGdWedke@dIdWedleAdKdWedmeBdMdWedneEdSdWedoeFdUdWgZGdS )r    N)wraps)Q)includeurl)TemplateResponse)HttpResponse)get_user_model)logoutlogin)cache)login_required)redirect)reverse)get_http_schema)Employee)gettext_lazy)INTELLIGENTTIME)get_software_type_without_loadc                s   t   fdd}|S )Nc                s  dd l }ddlm} ddlm} ddlm} ddlm} | j	d }|j
}	d|	}
||
|}|r|d |  d}t|d	kr8|d
 }|jj|d }|s|d}d|_|S |jj|d}|d }|jj|d }|r$|jj|d}|jjd	||d }|s6|d}d|_|S n|d}d|_|S nTt|d
krz|d }|jj|d }|s|d}d|_|S n|d}d|_|S  | f||S )Nr   )
Membership)Company)render_to_response)settings	HTTP_HOSTz.{}.      )namez404.htmli  )rolecompanyvendor_company)remysite.base.modelsr   mysite.cloud.modelsr   django.shortcutsr   django.confr   METADOMAIN_HOSTformatsearchstartsplitlenobjectsfilterexistsZstatus_codeget)requestargskwargsr    r   r   r   r   current_domainmain_domain_namedomain_regexcurrent_company_regexZcurrent_domain_splitvendor_nameZvendor_existresponseZvendorcompany_nameZcompany_existr   Zmembership_exist)func -G:\easytimepro\master/mysite/accounts\urls.pywrapper   sV    


z,check_multiple_domain_valid.<locals>.wrapper)r   )r:   r=   r;   )r:   r<   check_multiple_domain_valid   s    Ar>   c             C   s  ddl m} ddlm} ddlm} t| jd}t	
d}|rt	||r|jj|d}d}| s|jj|d	}| rd
}n|jj|d	}d
}|s|s|dd}tt|S |sttd}	|	dd}nttd}	|	dd}tt|S n|st|d }|jj|dd}
|
 r$d
nd}||jd|dd}|jj|djd d}| s|dd}tt|S n|dddd}tt|S )Nr   )MyUser)r   )r   emailz?^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$)email__iexactF)emp_codeTregister)r@   typeZ&please_enter_your_email_or_employee_idZ	not_found)msgrD   employee_id_does_not_existr   )userr   rG   Zcompany_check)r@   username
login_usersupport_vendorrD   )rG   )r   successemployee)rH   rI   rJ   rD   )mysite.accounts.modelsr?   mysite.personnel.modelsr   r!   r   parse_emailGETr/   r    compilematchr,   r-   r.   r   jsondumpsstr_rH   exclude)r0   r?   r   r   	user_dataemail_rerG   is_empcontextrE   Zvendor_membershiprJ   
membershipr;   r;   r<   check_user_type`   s\    


r]   c             C   s  ddl m} ddlm} ddlm} ddlm} | j	dd}| j	d}|d	krht
td
d	|dS | j	d}|jj|d}| r|dkr| j	d}	|jj|	d}
|
  r|
j|d jd}| rt
td|dS t
tdddS nt
tdddS n| j	d}|jj|d}| r|d }|jj|d |d}| r|jjd|d d }|rt| }|st
tdddS t
td|dS t
tdddS nt
tdddS nt
tdddS dS )ze
    check an emp's company name correct or not from front end.
    :param request:
    :return:
    r   )r   )r   )r?   )r   	is_vendorNrI   truer   )retr^   rI   r9   )name__iexactrL   rH   )rB   )
company_id)r`   rI   zYou are not in this company)r`   messagezError In Employee ID)rH   )r   rG   r   )r   r   z?This company has vendor, Please use vendor's subdomain to loginzEnter Company Name correctlyz)This company is not added to your account)r"   r   rN   r   rM   r?   r!   r   POSTr/   r   rS   rT   r,   r-   r.   idget_domain_company_name)r0   r   r   r?   r   r^   rI   r9   current_companyrB   Zcurrent_empemp	user_namecurrent_userZcurrent_membershipZcompany_has_vendorrequest_company_namer;   r;   r<   
check_comp   sJ    




rm   c             C   s  | j d}| j d}t| j d}| j d}||krV|ddd}tt|S t }|jt	|dt	|d	B }|
 rd
di}tt|S t|}|dkr|dd }	t|	dkr|	d d }
q|	}
n|}
|jj|
|||
|d}|  |dd}t|  tt|S d S )N	password0	password1r@   Zmobile_numberzPlease input same password.Zpassword_mismatch)r@   rE   rD   )rA   )Zmobile__iexactrD   Zalready_created   @r      )ZnicknamemobilerK   )r@   rD   )re   r/   rO   r   rS   rT   r   r,   r-   r   r.   r+   r*   Zcloud_create_usersaveinit_register_email)r0   pwd0pwd1r@   rs   r[   
class_userZtemp_objZemail_lengthZsplit_emailZallowed_username_or_nicknameuser_objr;   r;   r<   create_user   s8    
rz   c             C   s  ddl m} ddlm} ddlm} | jd}t| |}t	|t
rV|d }|d }n|S | jdd}td	}	t|}
|
d
krttd}d|i}tt|S t|	|sttd}d|d}tt|S |jj|d}t }|jj|d}| sttd}d|d}n|d }| rBttd}d|d}n|t| |}|j|_|  t|d |r|jj|d}|jjd|dj}t|d||d |j}|j}|||| ddi}tt|S )Nr   )r   )r   )status_company_joinedcoder@   r9    z^[A-Za-z0-9-]+$2   Zcompany_name_exceeds_the_limitsrE   )company_name_should_be_letters_or_numbersr   )r`   rE   )ra   )rA   user_does_not_existZcompany_name_already_exist)r   )r   r   r   )r   r   r`   ) !mysite.cloud.models.model_companyr   r!   r   mysite.base.tasksr{   re   r/   decrypt_data
isinstancedictr    rQ   r+   rU   rV   r   rS   rT   rR   r,   r-   r   r.   cloud_create_companyrf   rh   rt   create_admin_membershiprG   r@   delay)r0   r   r   r{   aes_datauser_detailr@   Zvendor_company_namer9   company_name_reZcompany_name_lengthrE   resultmatched_companyrx   ry   r   r   Zvendor_company_userZvendor_emailZvendor_company_idr;   r;   r<   create_new_company  s\    









r   c             C   sP   ddl m} |d kr|  }|jj|| dd }||_|d k	rD||_|  d S )Nr   )r   )r   rG   )r!   r   get_current_companyr,   Zget_or_creater   r   rt   )objr   r   r   r   r\   r;   r;   r<   r   Q  s    r   c             C   s   dd l }ddlm} ddlm} |j}|j}|j}|j}|j	}	|j
}
| jd }| }||d||dddd	|j  |j  |j|d
 ||||	|
d}|  |S )Nr   )r   )r   r   z{}.{}ZDefaultINZ	Bangalore   )Zdays)r   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)datetimer$   r   r   r   ZDEFAULT_SUBSCRIPTION_DAYSZDEFAULT_MAX_DEVICES_LIMITZDEFAULT_MAX_EMPLOYEES_LIMITZDEFAULT_MAX_TRANSACTIONSZ%DEFAULT_MAX_MOBILE_APPLICATIONS_LIMITZDEFAULT_MAX_WHATSAPP_PUSH_LIMITr%   lowerr'   ZnowZ	timedeltart   )r0   r9   r   r   r   Zdefault_subscription_daysZdefault_max_devices_limitZdefault_max_employee_limitZdefault_max_transactions_limitZ%default_max_mobile_applications_limitZdefault_max_whatsapp_push_limithostZnew_companyr;   r;   r<   r   \  s6    

r   c                s  ddl m} d}| j}i }dddd |jrF|jj}|j |d< n`| }|j	j
|dj|d	d
d}|j |d<  t|j	j||dj |d< dd |D |d<  fdd|D |d< |j	j
||d}|j
|d	}| r<| j}	tdt|j d}
|	j|jkr$|
s$d|d< nd|d< |	j |d< nj|j
|d}| r| j}	tdt|j d}
|	j|jkr|
sd|d< nd|d< |	j |d< tt|S )a  
    Get all company data for a user
    :param request:
    :return:<class 'dict'>:
    {'current_company': 'Q', 'other_company': ['TEST', 'TEST2'], 'display_current_company': 0, 'head_company': 'TEST2'}
    current_company: logined company
    other_company: all company except the logined one
    display_current_company: judge for vendor dashboard page display all/current company
    head_company: the first company display for vendor dashboard page.
    r   )r   r   VU)201rh   )rG   )r   company__namer   )rG   r   Zcurrent_company_rolec             S   s   g | ]}|d    qS )r   )upper).0r9   r;   r;   r<   
<listcomp>  s    z#get_all_company.<locals>.<listcomp>Zother_companyc                s   g | ]} t |d   qS )r   )rU   )r   Zcompany_role)role_btnr;   r<   r     s    Zother_company_role)rG   r   Zcurrent_company_btn_clicked_r   Zdisplay_current_companyhead_company)r   )r!   r   rG   is_employeeZ
departmentr   r   r   r   r,   r-   rW   values_listrU   r/   r   r.   firstr   r   pkr   rS   rT   )r0   r   VENDOR_ROLErG   r   rh   r   Zhead_membership_queryZhead_membershipr   current_company_btn_clickedZcheck_membershipr;   )r   r<   get_all_company|  sF    





r   c          
   C   s  ddl m} ddlm} ddlm} |jj| jj	d}| j
d}| j
d}|jj|d}| sd	|d
 d}tt|S |jj|d |d}	|	 sdd| d}tt|S |d j	|_|  d|j }
d|j }d|j }t|
 |dkrt| t| nD|dkr6t|d	 t| n"|dkrXt|d	 t|d	 yt|  W n$ tk
r } zW d d }~X Y nX d}t| ||d ttddiS )Nr   )r?   )r   )r   )rf   r9   company_shift_type)ra   r   z not exist.)r`   rE   )r   rG   r   zYou are not belong to z
user_id_%szvendor_role_%szcurrent_company_btn_clicked_%sZnormalallcurrentz%mysite.accounts.backends.ModelBackend)backendr`   )rM   r?   r!   r   r   r   r,   r/   rG   rf   rP   r-   r.   r   rS   rT   rh   rt   r   r   deletesetr	   	Exception
auth_login)r0   r?   r   r   rG   r9   r   r   r   matched_membershipkZvendor_roler   er   r;   r;   r<   change_current_company  sL    







r   c             C   s  ddl m} ddlm} ddl m} ddlm} | jd}t	| |}t
|trZ|d }n|S | jd}|jj|d	}	|	 rt| }
|
rd
d |jjd|
dD }|r||krd|
}d|d}tt|S n$ttd}d|d}tt|S |jj||d}| r|d }n|||d}|  |	d }	t d tkrt|dt|	j}|stttdddS t| ||	 ttddiS )Nr   )TempUser)r   )r   )get_system_settingr|   r@   r9   )ra   c             S   s   g | ]}|j jqS r;   )r   r   )r   mr;   r;   r<   r     s    z)join_existing_company.<locals>.<listcomp>r   )r   Zvendor_company__namez=You can only choose to join the company under this vendor: {}r   )r`   rE   company_does_not_exist)rA   r9   )r@   r9   software_typeemail_settingr   zEmail setting does not exist.r`   )r!   r   r"   r   r   mysite.utilsr   re   r/   r   r   r   r,   r-   r.   rg   r'   r   rS   rT   rU   rV   rt   r   r   rf   send_encrypt_email)r0   r   r   r   r   r   r   r@   r9   r   Zdomain_company_nameZbelongs_vendor_companiesrE   r   	temp_userr   r;   r;   r<   join_existing_company  sD    







r   c          	   C   s\  ddl m} ddlm} ddlm} | jd}t| |}t	|t
rN|d }n|S | jd}| jd}| jd	}	| jd
}
|jj|d}| sttd}d|d}tt|S |jj||d}| r|d }n|||d}|  |d }t d tkr4|dt|j}|s4ttdddS t| ||d||	|
d ttddiS )Nr   )r   )r   )r   r|   r@   r9   r7   vendor_phone
vendor_cnr)ra   r   r   )r`   rE   )rA   r9   )r@   r9   r   r   r   zEmail setting does not exist.r   )r   r7   r   r   r`   )r!   r   r"   r   r   r   re   r/   r   r   r   r,   r-   r.   rU   rV   r   rS   rT   rt   r   r   rf   r   )r0   r   r   r   r   r   r@   r9   r7   r   r   r   rE   r   r   r   r;   r;   r<   join_as_vendor  s>    




r   c             C   sr  ddl m} ddlm} ddlm}	 ddlm}
 ddlm	} t
| }| jd }|d}d	j|||d
}d| d |j d d t| d }|dkrd| d |j d d t| d | d | d | d }t||dd}|| }d| d |j d d t| d }t||dd}|| }|	jj|jdd}dd |D }|
j|||jt|j||||||d
 d S )Nr   )r   )r   )r   )join_company_email)aes_encryptr   zbiotime:approval_userz%{scheme}://{host}{approval_url}?code=)schemer   approval_urlz{'approval_user':'z','company_name':'z','status':'approvalz
','role':'z'}r   z','vendor_name':'z','vendor_phone':'z','vendor_cnr':'zutf-8)encodingz','status':'rejectr   )r   r   c             S   s   g | ]}|j jqS r;   )rG   r@   )r   Zmemr;   r;   r<   r   \  s    z&send_encrypt_email.<locals>.<listcomp>)r   r7   r   r   )r$   r   Zdjango.urlsr   r!   r   r   r   mysite.tools.encryption_utilsr   r   r%   r'   r   rU   r,   r-   r   rf   )r0   r@   r   r   r7   r   r   r   r   r   r   r   r   r   r   base_urlZapproval_raw_dataZaes_approval_dataZurl_approvalZreject_raw_dataZaes_reject_dataZ
url_rejectr   Zadmin_emailr;   r;   r<   r   B  s,    
&>&r   c       &      C   s  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	d
}| jdd}t||dd}	yt|	}
W n$ tk
r   d|d< t| d|S X |
dd}|
dd}|
dd}|
dd}|
dd}|
dd}|
dd}d}d\}}}|}d}||d< |jj||d}| sBd|d< t| d|S |d }|jj|jd}| sxd|d< t| d|S |dkrzt||kr|jj|d}| st| |}d }n|d }|r|}||_||_|  t|d j}t }|jj|d!}| sd"|d< t| d|S |d }t||kr.|rFt||| t|||d |d# |jd$kr>dd%lm} d& ||j!}| }|" } x.| D ]&}!|!d' }"|!d( }#t#$d)|" |# qW t#d)| d}$|$s>|j%|d*}#|j&|#d+}%|j'|%d' |%d, d- |%d, d. d/ |j(|#d+ t#$d)| |# nt|||d  |)  |*|d0|| d1| d2 |d< d|d3< t| d|S t|d j}|)  |*|d4|| d5| d2 |d< d|d3< t| d|S dS )6zK
    approval a user to join company.
    :param request:
    :return:
    r   )r   )r   )r   )status_join_company)aes_decrypt)r   Zapprovalr   )statusr`   r|   r}   zutf-8)r   zError request.rE   zcloud/approval_join_result.htmlapproval_userr9   r   r   r7   Nr   r   )r   r   r   F)rA   Zcompany_name__iexactzAlready audited by other admin.)ra   zCompany does not exist.T)rA   zUser not exist.)r   r_   )AWSBoto3APIz*.{}.{}Z
DomainNameZCertificateArnZvalid_certificate_domain_name_)domain_name)certificate_arnZResourceRecordNameZValue)r   Zresource_record_nameZresource_record_valueZapprovedz.Approved successfully.The result will send to z	's email.r`   Zrejectedz3Reject successfully.A notification will be sent to )+r!   r   r"   r   r   r   r   r   r   r$   r   rP   r/   rU   evalSyntaxErrorr   r,   r-   r.   r9   intr   Zcompany_phoneZcompany_cnrrt   rf   r   r   ZDEPLOY_TO_AWSZmysite.cloud.utilsr   r'   r&   Zacm_list_certificatesr   r   Zacm_request_certificateZacm_describe_certificateZ#route53_change_resource_record_setsZelbv2_add_listener_certificatesr   r   )&r0   r   r   r   r   r   r   r[   r   raw_dataZdata_detailr@   r9   r   r   r7   r   r   Zvendor_company_objZ
STUFF_ROLEZSUPERUSER_ROLEr   Zrole_for_vendor_companycreater   r   rb   rx   ry   r   r   ZawsZcertificate_summary_listZcertificateZexisted_domain_namer   Z*double_check_valid_certificate_domain_nameZdomain_validation_optionsr;   r;   r<   r   a  s    









r   c             C   sL   | j dd}|s8| j d}|dkr,d}n|dkr8d}d|i}t| d|S )	Ncontentr}   rD   joinz5An email request has been sent to admin successfully!	reset_pwdz$Email sent to your register mail id.zcloud/display_result_page.html)rP   r/   r   )r0   r   Z	send_typer[   r;   r;   r<   send_email_ready  s    r   c             C   sP  ddl m} ddlm} ddl m} ddlm} ddlm} | j	}|j
j|jd}| jdd	}|j
j|d
}| sttdddS |d }|j
j||d}	|	 rttdddS t d tkr|dt|j}
|
sttdddS |j
j|j|d}| r|d }n||j|d}|  t| |j| ttddiS )Nr   )r   )r   )r   )r   )r?   )rf   r9   r}   )ra   r   zCompany does not exist.)r`   rE   )rG   r   r   z&You're already belong to this company.r   r   r   z+This company not yet the set email setting.)rA   r9   )r@   r9   r`   )r!   r   r"   r   r   r   r   rM   r?   rG   r,   r/   rf   rP   r-   r.   r   rS   rT   r   r   rU   r@   rt   r   )r0   r   r   r   r   r?   rk   r9   r   r   r   r   r;   r;   r<   admin_join_company  s4    

r   c          	   C   s  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dkr`t| d	}nN| j}|jj|jd
}| jdd}	| jdd}
| jdd}| jdd}|jj|	d}| sttdddS |d }|jj||d}| rttdddS |dt|j}t d tkrH|sHttdddS |jj|j|	d}| rn|d }n||j|	d}|  t| |j|d|
||d ttddiS |S )Nr   )r   )r   )r   )r   )r   )r?   rP   zcloud/admin_join_as_vendor.html)rf   r9   r}   r7   r   r   )ra   r   zCompany does not exist.)r`   rE   )rG   r   r   z"You already belong to the company.r   r   r   z+This company not yet the set email setting.)rA   r9   )r@   r9   )r   r7   r   r   r`   )r$   r   r!   r   r"   r   r   r   r   rM   r?   methodr   rG   r,   r/   rf   re   r-   r.   r   rS   rT   rU   r   r   r@   rt   r   )r0   r   r   r   r   r   r?   r8   rk   r9   r7   r   r   r   r   r   r   r;   r;   r<   admin_join_as_vendor
  sD    




r   c             C   s  ddl m} ddlm} ddlm} ddlm} ddlm	} d}d }d }| j
d}	d	}
|	d k	rht|	}
| j
d
}|d k	r| }td}t||
}|s(|jj|d}|
sttdddS | sttdddS |d }t|j}t d tkr(|d|}|s(ttdddS |r<|jj|
d}|rR| rRd}n|jj|
|d}| rpd}| sttdddS |d }|r|jd krttdddS t| ||| ttddiS )Nr   )r?   )r   )r   )r   )r   Fr@   r}   r9   z?^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$)ra   z$Email or Employee ID Does not exists)r`   rE   zCompany does not existsr   r   zEmail setting does not exists)rA   )rB   !department__company__name__iexactTrc   z2Your email does not exist, please connect to adminr`   )rM   r?   rN   r   r"   r   r!   r   r   r   re   r/   rO   r   r    rQ   rR   r,   r-   r   rS   rT   r.   rU   rf   r   r   r@   send_email_reset_pwd_link)r0   r?   r   r   r   r   rZ   rG   rb   r@   rX   r9   rY   Zcheck_is_userr   r   r;   r;   r<   generate_pwd_email3  sX    




r   c             C   s   ddl m} ddlm} ddlm} t| }| jd }|s>dS |j}	|	sLdS |j	rn|j
}
d|
 d | d	 }nd}d
|	 d | d	 }t||dd}td}dj||||d}||	|| dS )z/
    :param emp: emp instance
    :return:
    r   )r   )reset_pwd_link_email)r   r   Nz{'emp_code':'z', 'company_name':'z'}z
{'email':'zutf-8)r   zbiotime:reset_pwdz,{scheme}://{host}{reset_pwd_url}?code={code})r   r   reset_pwd_urlr|   )r   r   r   r   r$   r   r   r%   r@   r   rB   rU   r   r'   r   )r0   ri   rb   r9   r   r   r   r   r   r@   rB   r   r   r   link_urlr;   r;   r<   r   h  s(    

r   c                s  ddl m} ddlm} | jdkrb| jd}t| |}t|t	sF|S d| jdi}t
| d|S | jdkr| jd	 | jd
} fdd}| krʈ r|r| r| jd}t| |}t|t	s|S d| krB|d }|jj|d}	|	 s&ttd}
d|
d}tt|S |	d }	|	  |	  n|d| kr|d }|d }|jj||d}| sttd}
d|
d}tt|S |d }|  d|_|  ddd}n
ddd}tt|S d S )Nr   )r?   )r   rP   r|   r   zcloud/reset_pwd.htmlre   pwdrw   c                 s   d} t |  rdS dS )Nz#(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}TF)r    findall)pattern)r   r;   r<   validate_password  s    z$reset_pwd.<locals>.validate_passwordr@   )rA   r   rc   )r`   r   rB   r9   )rB   r   rF   r   zReset password successzPassword didn't match)rM   r?   rN   r   r   rP   r/   r   r   r   r   re   keysr,   r-   r.   rU   rV   r   rS   rT   set_passwordrt   verified_employee)r0   r?   r   r   r   r[   rw   r   r@   rG   rE   rB   r9   ri   r;   )r   r<   r     s^    










r   c             C   s   ddl m} ddlm} ddlm} t| }| jd }t| }|d krJd}t	| j
dd}d| d	 | d
 }t||dd}	td}
dj|||
|	d}||| ttddiS )Nr   )r   )r   )send_register_emailr   r}   r@   z{'email': 'z', 'company_name': 'z'}zutf-8)r   zbiotime:confirm_registerz3{scheme}://{host}{register_account_url}?code={code})r   r   register_account_urlr|   r`   )r$   r   r   r   r   r   r   r%   rg   rO   re   r/   rU   r   r'   r   r   rS   rT   )r0   r   r   r   r   r   r9   r@   r   r   r   r   r;   r;   r<   ru     s$    
ru   c             C   s|   ddl m} | jd}t| |}t|tr6|d }n|S t }|jj	|dd }|j
rbt| dS dd||d}t| d	|S )
uo  
    admin添加了新的user后，用户收到确认的邮件，点击邮件链接后的操作
                解密失败，用户更改了参数
                  ----------> 返回错误提示 #end        已激活，代表以设置密码
    解密code参数-->                                  ------------------------->返回登录界面 #end
                  ---------->判断是否用户以激活-->
                  解密成功                           -------->返回设置pwd页面（在设置完密码后一并激活） #end
    :param request:                                  未激活
    :return:
    r   )r   r|   r@   )rA   zcloud/login_enter_email.htmlzPlease set your password)r`   r   r|   r@   zcloud/active_set_pwd.html)r!   r   rP   r/   r   r   r   r   r,   r-   is_staffr   )r0   r   r   r   r@   rx   ry   r[   r;   r;   r<   confirm_new_user  s    



r   c       	      C   s   | j d}| j d}| j d}t| |}t|trB|d }n|S ||krd|dd}t| d|S t }|jj|d}|| d	|_	|
  d
di}t| d|S d S )Nrn   ro   r|   r@   zPlease input same password.)r@   rE   zcloud/active_set_pwd.html)rA   Tr   zActive Success!zcloud/display_result_page.html)rP   r/   r   r   r   r   r   r,   r   r   rt   )	r0   rv   rw   r   r   r@   r[   rx   rG   r;   r;   r<   active_set_pwd  s$    



r   c       	      C   s   ddl m} | jd}t| |}t|tr6|d }n|S t }|jj	|dd }|jj	|dj
dd}| rzt| d	S d
|_|  dd||d}t| d|S )u  
    新用户注册时设置密码后点击邮箱链接的操作
    用户点击邮箱的激活链接后的操作。
                解密失败，用户更改了参数
                  ----------> 返回错误提示 #end        已加入公司，表明此前已经激活
    解密code参数-->                                  ------------------------->返回登录界面 #end
                  ---------->判断是否用户有加入公司-->
                  解密成功                           -------->返回join / create公司页面，并激活（修改is_staff参数）#end
    :param request:                                  未加入公司
    :return:
    r   )r   r|   r@   )rA   )rG   N)r   zcloud/login_enter_email.htmlTzYour account activate success)r`   r   r|   r@   z!cloud/create_or_join_company.html)r!   r   rP   r/   r   r   r   r   r,   r-   rW   r.   r   r   rt   )	r0   r   r   r   r@   rx   ry   r\   r[   r;   r;   r<   confirm_register%  s$    



r   c             C   s   ddl m} yjt||dd}t|}|dd}t| }|drV|d }t| |}||krtddd	}t| d
|S W n& tk
r   ddd	}t| d
|S X |S )u           解密失败，用户更改了参数
                ----------> 返回错误提示 #end
    解密参数-->
                ----------> 返回解析后的字典
                解密成功
    :param request:
    :param aes_data:
    :return:
    r   )r   zutf-8)r   r9   r}   rc   z
Error link)r`   r   zcloud/display_result_page.html)	r   r   rU   r   r/   rg   get_company_namer   r   )r0   r   r   r   r   decrypt_company_namerl   r[   r;   r;   r<   r   I  s$    


r   c             C   s6   | r2d| kr.d| kr.|  d\}}|d | } | S | S )z3parse email, sometimes @ will be %40 from front endrq   z%40)rsplit)r@   Z
email_headZ	email_endr;   r;   r<   rO   o  s    rO   c       
      C   s   ddl m} ddlm} | j}|jj|jd}| jdd}t	
d}t	||svttd}d	|d
}tt|S |jj|d}| rttd	dd
S t| |}	t|d	|	d ddi}tt|S )z7
    create new company for created & logined user
    r   )r   )r?   )rf   r9   r}   z^[A-Za-z0-9-]+$r   r   )r`   rE   )ra   z%Company with this name exist already.)r   r`   )r"   r   rM   r?   rG   r,   r/   rf   rP   r    rQ   rR   rU   rV   r   rS   rT   r-   r.   r   r   )
r0   r   r?   rk   r9   r   rE   r   Ztmp_companyr   r;   r;   r<   admin_create_companyy  s$    

r   c             C   s   | j }|dkr| jdd}| jd}| jd}|||d}|dkrtjj||d}| r|d	 jd	krt| |d	 d|d
 d|d< t	| d|S t	| d|S t	| d|S dS )z@
    return input pwd page
    :param request:
    :return:
    rP   r9   NrH   rI   )r9   rH   rI   rL   )rB   r   r   )rb   r9   z:Password reset link has been sent to your register mail idr   zcloud/display_result_page.htmlzcloud/login_enter_pwd.html)
r   rP   r/   r   r,   r-   r.   r   r   r   )r0   r   r9   rH   rI   r[   ri   r;   r;   r<   	check_pwd  s"    r   c             C   sh  ddl m} ddlm} ddlm} | jdd}| jdd }| jd}| jd	}t	| }|s|j
j|d
}	|j
j|	dd }
|
r|
jj}| jd }|j}d|}t||}|r|d|  d}|d }||krd|||td }nd||||td }nd|||td }|dkrLd|||}nd||||}t|| S )zY
    for display url like: http://sub-domain.host/*
    :param request:
    :return:
    r   )r   )r?   )r   r^   r}   r9   rH   rI   )rH   r   )rG   r   r   z.{}Nr   rc   z
{}://{}.{}zbiotime:check_pwdz{}://{}.{}.{}r_   z5?company_name=&username={}&login_user={}&is_vendor={}z7?company_name={}&username={}&login_user={}&is_vendor={})r$   r   rM   r?   r!   r   rP   r/   r   r   r,   r-   r   r   r   r%   r&   r'   r    r(   r)   r*   r   r   )r0   r   r?   r   r^   r9   rH   rI   r   rG   rj   r   r4   r5   r6   Z
host_splitZhost_company_nameZredirect_urlZparamsr;   r;   r<   redirect_check_pwd  s>    



r   c          
   C   st  ddl m} ddlm} ddlm} | jd}tj	j
|d}|rJ|d j}|j	j
|dd}| r"y|| d	d d
 }|dj|d jd }	d|d j|	d}
d}|||
}|d||d jg|d jd ddi}tt|S  tk
r } zdt|i}tt|S d }~X Y nX n&ttd}dt|i}tt|S n&ttd}dt|i}tt|S d S )Nr   )SystemSetting)send_one_mail)render_to_stringr@   )rA   r   )rb   r   /rc   z%/accounts/easytime_reset_pwd/?id={id})rf   z EasyTime Pro Password Reset Link)Z
head_title
first_namer   z'static/reset_password_mail_content.html)rb   rE   rK   Z*password_reset_error_msg_for_mail_settingsZemployee_not_found)r!   r   Zmysite.admin.services.emailr   Zdjango.template.loaderr   rP   r/   r   r,   r-   rb   r.   Zbuild_absolute_urir'   rf   r   r@   r   rS   rT   r   rU   rV   )r0   r   r   r   Zemployee_emailri   rb   Zemail_settingsZdomainr   Zcontent_contextZapprovers_mail_contentr   r   rd   r;   r;   r<   password_reset_mail_easytimepro  s:    


r   c                s   ddl m} | jdkr2d| jdi}t| d|S | jdkr| jd}| jd | jd	} fd
d}| kr r|r| r|jj|d}|d }|	  d|_
|  ddd}nttd}d|d}tt|S d S )Nr   )r   rP   rf   zstatic/reset_pwd.htmlre   r|   ZpasswordZconfirm_passwordc                 s   d} t |  rdS dS )Nz#(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,}TF)r    r   )r   )r   r;   r<   r     s    z-easytime_reset_pwd.<locals>.validate_password)rf   r   ZSuccess)r`   rE   Zpassword_didnt_matchrc   )rN   r   r   rP   r/   r   re   r,   r-   r   r   rt   rU   rV   r   rS   rT   )r0   r   r[   Zemployee_idrw   r   ri   rd   r;   )r   r<   easytime_reset_pwd  s*    



r   c             C   sb   dd l }ddlm} | jd }|j}d|}|||}|rZ|d |  dd }nd}|S )Nr   )r   r   z.{}r   rc   r}   )	r    r$   r   r%   r&   r'   r(   r)   r*   )r0   r    r   r3   r4   r5   r6   r9   r;   r;   r<   rg   3  s    

rg   c             C   s   dd l }ddlm} ddlm} | jd }|j}d|}|||}|rf|d |	  
dd }	n*|jj|dd	}	x|	D ]}
|
d }	qW |	S )
Nr   )r   )r   r   z.{}r   rc   )r   r   )r    r$   r   r   r   r%   r&   r'   r(   r)   r*   r,   r-   r   )r0   r   r    r   r   r3   r4   r5   r6   r9   Zeachr;   r;   r<   r   C  s    


r   c             C   sD   | j d }| j}t|}|d|i |  d|i}tt|S )Ncheck_box_valguide_box_val)rP   rG   r   Zset_preferencesrt   r   rS   rT   )r0   r   rG   valuer[   r;   r;   r<   check_user_guideT  s    
r   c             C   s"   | j d}d|i}tt|S )Nr   r   )rG   Zget_preferencesr   rS   rT   )r0   r   r[   r;   r;   r<   get_user_guide_data^  s    r  z^check_user_type/$)r   z^check_comp/$z^create_user/$z^create_new_company/$z^get_all_company/$z^change_current_company/$z^join_existing_company/$z^approval_user/$z^send_email_already/$z^admin_join_company/$z^generate_pwd_email/$z^reset_pwd/$z^join_as_vendor/$z^admin_join_as_vendor/$z^init_register_email/$z^confirm_register/$z^confirm_new_user/$z^active_set_pwd/$z^admin_create_company/$z^check_pwd/$z^redirect_check_pwd/$z"^password_reset_mail_easytimepro/$z^easytime_reset_pwd/$z^check_user_guide/$zget_user_guide_data/$)NN)r   NNN)HrS   r    	functoolsr   Zdjango.db.modelsr   Zdjango.conf.urlsr   r   Zdjango.template.responser   Zdjango.http.responser   Zdjango.contrib.authr   r	   r
   r   Zdjango.core.cacher   Zdjango.contrib.auth.decoratorsr   r#   r   Zdjango.core.urlresolversr   Zmysite.base.utilsr   rN   r   Zdjango.utils.translationr   rV   Zmysite.admin.constr   Zmysite.admin.utilsr   r>   r]   rm   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ru   r   r   r   r   rO   r   r   r   r   r   rg   r   r   r  Zurlpatternsr;   r;   r;   r<   <module>   s   EH8,E
 93/+
|)5!G $&
0)&
