U
    \sc6ñ  ã                   @   s4  d dl 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mZmZmZ d dlmZmZmZ dd	lT dd	lT d d	lT d d	lT d dlZe e¡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dl&m'Z' d dl(Z(d dl)m*Z* d dl)m+Z+ d dl,Z,d dl-Z-d dl.Z.dd	l/T d dl0m0Z0m1Z1 d dl2m3Z3m4Z4 d dl0Z0G dd„ dej5ƒZ6d dl0Z0G dd„ dej5ƒZ7G dd„ dej5ƒZ8G dd„ dej5ƒZ9G dd„ dej5ƒZ:G dd „ d ej5ƒZ;G d!d"„ d"ej5ƒZ<G d#d$„ d$ej5ƒZ=G d%d&„ d&ej5ƒZ>G d'd(„ d(ej5ƒZ?G d)d*„ d*ej5ƒZ@dS )+é    N)Úrender)ÚstatusÚgenericsÚpermissions)ÚResponse)Úpartial)ÚLoginMailToUserThreadÚRegisterMailToUserThreadÚResendOTPMailToUserThreadÚContactMailToUserThread)Úsend_login_to_userÚsend_mobile_otp_to_userÚsend_register_to_useré   )Ú*)Úmail)r   r   r   )ÚIsAuthenticated)Úsettings)Úmake_password)ÚQ)Úgenerate_access_token)Ú	send_mail)ÚEmailMessage)ÚdatetimeÚ	timedelta)Ú
FormParserÚMultiPartParserc                   @   s   e Zd ZeZddd„ZdS )ÚUserRegisterAPIViewNc              
   O   s`  �zü|j }|d |d< |d |d< | d¡r6| d¡nd |d< | dd ¡}tj ¡ j|d� ¡ }|j|d< | d¡r~| d¡nd |d< | d¡rš| d¡nd |d< d	|d
< dg|d< g |d< d}d t	j
tj|d�¡}	|	|d< tj ¡ }
|
tdd� }||d< tj t|d d�t|d d�B ¡ ¡ }|�rð|jdk�rº|jdk�rº|d �r’tjj|jd�j|	|d� |d |	|jdœ}t|ƒ ¡  dddœ}nt|d |	ƒ dddœ}t|tjd �W S |jdk�rü|jdk�rüdd!dœ}t|tjd �W S �n| j|j d"�}| ¡ �rÞ| ¡ }tjj|jd� ¡ }t|ƒ}tjj|j  dd ¡d#� ¡ }|d �r”t d$ƒ tjj|jd�j|	|d� |d |	|jdœ}t|ƒ ¡  n(tjj|jd�j|	|d� t|d |	ƒ dt!d% |j d&œ}t|tjd �W S dd'|j"d&œ}t|tjd �W S W n\ t#k
�rZ } z<t$ %d(t&|ƒ ¡ dt'd% t&|ƒd)œ}t|tj(d � W Y ¢S d }~X Y nX d S )*NÚemailÚusernameÚprofile_picÚcountry_code)r!   ÚcountryÚsocial_login_typeÚuidé   Úrolesr   ÚgroupsÚuser_permissionsé   Ú ©ÚkÚotpé   ©ÚminutesÚexp_otp_datetime©Zusername__iexactÚphone_number©r3   F©Úid©r-   r1   ©r   Úcurrent_otpÚnamer   z Please check your gmail account.©r   ÚmessagezPlease check your mobile inbox.©r   z*You have already registered. Please login.©Údata©r   zemail varification datar<   ©r   r<   r?   ú)A user with that username already exists.zUserRegisterAPIView:error => ©r   r<   Úerror))r?   ÚgetÚCountryÚobjectsÚallÚfilterÚlastr6   ÚjoinÚrandomÚchoicesÚstringÚdigitsr   Únowr   ÚUserr   Úemail_varificationÚphone_varificationÚupdateÚ
first_namer	   Ústartr   r   r   ÚHTTP_201_CREATEDÚserializer_classÚis_validÚsaveZRegisterSerializerÚprintÚregister_messageÚerrorsÚ	ExceptionÚloggerrD   ÚstrÚExp_MESSAGEÚHTTP_400_BAD_REQUEST)ÚselfÚrequestÚpkÚargsÚkwargsr?   r"   Z
countryobjÚ	otp_ranger-   rP   Únow_plus_10ÚuserdataÚrecord_dataÚcontextÚ
serializerZmagidZmgviewZserializers_viewsÚusersÚe© rp   úT/var/www/html/staging.mfahmagazine.net/magazine_api/magazine_web_admin/base/views.pyÚpost)   sl    



(




zUserRegisterAPIView.post)N)Ú__name__Ú
__module__Ú__qualname__ÚUserRegisterSerializerrX   rr   rp   rp   rp   rq   r   %   s   r   c                   @   s   e Zd ZeZdd„ ZdS )ÚverifyOTPViewc              
   C   sl  |j  d¡}|j  d¡}�zð|d kr>dddœ}t|tjd�W S |d kr`dddœ}t|tjd�W S tj t|d�t|d	�B ¡ 	¡ }|d kr¢dd
dœ}t|tjd�W S tjj|d� 	¡ }t
|ƒd krÚdddœ}t|tjd�W S tj ¡ }tj t|d�t|d	�B ¡ 	¡ }|d k�r(dddœ}t|tjd�W S t|jƒ}	|j}
|}|j}||k �rît|jƒt|ƒk�rÒd|_| ¡  tj t|d�t|d	�B ¡ ¡ }tjj|jd�jddd� |  |¡}dd|	|j dœ}t|tjd�W S dddœ}t|tjd�W S ndddœ}t|tjd�W S W n\ tk
�rf } z<t dt
|ƒ ¡ dtd t
|ƒdœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr   r-   r   zPlease enter correct username.r;   r=   zPlease enter correct otp.r2   r4   ú.Please enter correct username or phone number.)r-   Tr5   )rR   rS   r   zOTP verify Success©r   r<   Úaccess_tokenr?   zOTP verify is failz
Expire OTPúUserLoginAPIView:error => r<   rC   )r?   rE   r   r   rW   rQ   rG   rI   r   rJ   r`   r   rP   r   r6   r1   Úintr-   ZverifiedrZ   ÚfirstrT   rX   r^   r_   rD   ra   rb   )rc   rd   r   r-   rl   Zexp_datetimeZotp_objÚcurrent_datetimern   rz   ZedddZexpiry_dateÚuserrm   ro   rp   rp   rq   rr   ò   sV    

 


 



 


zverifyOTPView.postN)rs   rt   ru   ÚUserLoginSerializerrX   rr   rp   rp   rp   rq   rw   ð   s   rw   c                   @   s    e Zd ZeZejfZdd„ ZdS )ÚUserLoginAPIViewc                 C   s|  �zi }|j  dd ¡}|j  dd ¡}|j  dd ¡}|j  dd ¡}|j  dd ¡}|rd|j  dd ¡|d< |rz|j  dd ¡|d< |rÈtj t|d�t|d�B ¡ ¡ }|r®|j|d< nd	d
dœ}	t|	t	j
d�W S tjj|d�}
tjj|d�}|
rð|
 ¡ n| ¡ }|�rþ|�r2t||dd�}| ¡ �r&| ¡  nt|jdƒ t|jƒ}d}d tjtj|d�¡}tj ¡ tjdd� }tj t|d�t|d�B ¡j||d� tj t|d�t|d�B ¡ ¡ }|
�rÖ|j|j|jdœ}t|ƒ  ¡  |�rütjj|d� ¡ }t!|j"|jƒ t#jj|jdd� ¡ }t$|ƒ}t|jdƒ tj t|d�t|d�B ¡ ¡ }|j%�rT|j%nd}|j&�rf|j&nd}|j'�rx|j'nd}|j(�rŠ|j(nd}|j)�rœ|j)nd}|j|j|j*|j|j"|j+|j,|j-|j|j.||||||j dœ}dt/d ||dœ}	t|	t	j0d�W S d	d
dœ}	t|	t	j
d�W S W n\ t1k
�rv } z<t2 3d t4|ƒ ¡ d	t5d t4|ƒd!œ}	t|	t	j6d� W Y ¢S d }~X Y nX d S )"Nr   Ú	device_idÚ	fcm_tokenr!   Úcountry_sort_name)Zcountry_code__iexact)Zsortname__iexactr"   r   rx   r;   r=   r2   r4   T)r?   r   z =============================///r)   r*   r+   r.   r/   ©Zphone_number__iexactr7   r8   )rn   Úis_subscriptionz======users.address)r6   rU   Ú	last_namer   r3   r!   r‚   rƒ   r-   ÚzipcodeZaddress_line_1Úaddress_line_2ÚstateÚcityÚcountry_nameZSubscription_datar   r<   ry   r{   rC   )7r?   rE   rF   rG   rI   r   r}   r6   r   r   rW   rQ   rJ   r€   rY   rZ   r[   r]   r   rK   rL   rM   rN   rO   r   rP   r   rT   r   r-   rU   r   rV   r   r3   ÚMagazinePurchaseInfoZUserSubscriptionListSerializerÚaddressr‰   rŠ   r‹   rŒ   r‡   r!   r‚   rƒ   rˆ   Zlogin_messageÚHTTP_200_OKr^   r_   rD   r`   ra   rb   )rc   rd   rT   r   r‚   rƒ   r!   r„   r"   rl   r   Úphonern   rm   rz   rh   r9   r~   rj   rk   Z	mysublistZaddress1Zaddress2rŠ   r‹   rŒ   Údictsro   rp   rp   rq   rr   -  sp     



&  <
zUserLoginAPIView.postN)	rs   rt   ru   r€   rX   r   ÚAllowAnyÚpermission_classesrr   rp   rp   rp   rq   r�   )  s   r�   c                   @   s   e Zd ZeZdd„ ZdS )ÚSocialLoginAPIViewc              
   C   s¾  �zZ|j  dd ¡}|j  dd ¡}|j  dd ¡}tƒ }|sRdddœ}t|tjd�W S tj t|d�t|d	�B ¡ 	¡ }|sž|||d
œ}dd|dœ}t|tjd�W S |�rZ|d krÆdddœ}t|tjd�W S tj t|d�t|d	�B ¡ 	¡ }	|	d k�r
dddœ}t|tjd�W S tj t|d�t|d	�B ¡ 	¡ }	t
|	jƒ}
|  |	¡}dtd |
|j dœ|_ |W S W n\ tk
�r¸ } z<t dt|ƒ ¡ dtd t|ƒdœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr   r$   rU   r   zPlease enter id.r;   r=   r2   )Zuid__iexact)r$   rU   r   é   zThis user is not exist.rA   z%Please enter correct username or uid.r   r<   ry   zSocialLoginAPIView:error => rC   )r?   rE   r   r   r�   rQ   rG   rI   r   rJ   r   r6   rX   ZSocial_login_messager^   r_   rD   r`   ra   rb   )rc   rd   r   r$   rU   Úresponserl   Z	users_objZdicrn   rz   rm   ro   rp   rp   rq   rr   {  s<    
 
 

 


:zSocialLoginAPIView.postN)rs   rt   ru   ÚSocialLoginSerializerrX   rr   rp   rp   rp   rq   r”   v  s   r”   c                   @   s    e Zd ZeZejfZdd„ ZdS )ÚResendOtpAPIViewc              
   C   s<  �zØ|j  dd ¡}|d kr4dddœ}t|tjd�W S tj t|d�t|d�B ¡ 	¡ }|d krvdddœ}t|tjd�W S tjj|d�}tjj|d�}|�r<d	}d
 
tjtj|d�¡}tj ¡ tjdd� }	tjj|d�jt|ƒ|	d�}tjj|d� 	¡ }
|
j|
j|
jdœ}t|dƒ t|ƒ ¡  dtd dœ}t|tjd�W S |�rØd	}d
 
tjtj|d�¡}tj ¡ tjdd� }	tjj|d�jt|ƒ|	d�}tjj|d� ¡ }
t|
d d |
d d ƒ dtd dœ}t|tjd�W S W n\ tk
�r6 } z<t  dt|ƒ ¡ dt!d t|ƒdœ}t|tj"d� W Y ¢S d }~X Y nX d S )Nr   r   z/Please enter correct username and phone number.r;   r=   r2   r…   r4   r)   r*   r+   r.   r/   r7   r@   r8   z====record data===r   r<   r3   r-   zResendOtpAPIView:error => rC   )#r?   rE   r   r   rW   rQ   rG   rI   r   rJ   rK   rL   rM   rN   rO   r   rP   r   rT   r`   r   r-   rU   r[   r
   rV   Zresendotp_messager�   Úvaluesr   r^   r_   rD   ra   rb   )rc   rd   r   rl   rn   Zuser_objZ	phone_objrh   r9   r~   rj   rk   ro   rp   rp   rq   rr   ©  sF    
 

zResendOtpAPIView.postN)	rs   rt   ru   r—   rX   r   r’   r“   rr   rp   rp   rp   rq   r˜   ¦  s   r˜   c                   @   s   e Zd ZeZddd„ZdS )ÚShowdataAPIViewNc              
   C   sÐ   zv|d k	rDt jj|d�}| j|dd�}dd|jdœ}t|tjd�W S t j ¡ }t	|dd�}dd|jdœ}t|tjd�W S  t
k
rÊ } z6t d	t|ƒ ¡ d
td dœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr5   F©Úmanyr   zUser Record found successfully.rA   r=   TzShowdataAPIView:error => r   r<   r;   )rQ   rG   rE   rX   r?   r   r   r�   rH   rv   r^   r_   rD   r`   ra   rb   ©rc   rd   r6   rn   rm   rl   ro   rp   rp   rq   rE   Ý  s    
zShowdataAPIView.get)N)rs   rt   ru   rv   rX   rE   rp   rp   rp   rq   rš   Ù  s   rš   c                   @   s*   e Zd Zej ¡ ZeZdd„ Z	dd„ Z
dS )ÚCountryAPIViewc              
   C   s¢   zH|j d D ]"}| j|dd�}| ¡ r| ¡  qdddœ}t|tjd�W S  tk
rœ } z6t 	dt
|ƒ ¡ d	td
 dœ}t|tjd� W Y ¢S d }~X Y nX d S )NZ	countriesF)r?   rœ   r   úRecord Found Successful.r;   r=   úCountryAPIView:error => r   r<   ©r?   rX   rY   rZ   r   r   rW   r^   r_   rD   r`   ra   rb   )rc   rd   Úitemrm   rl   ro   rp   rp   rq   rr   ö  s    

zCountryAPIView.postc              
   C   s�   z6t j ¡ }| j|dd�}dd|jdœ}t|tjd�W S  tk
rŠ } z6t	 
dt|ƒ ¡ dtd	 d
œ}t|tjd� W Y ¢S d }~X Y nX d S )NTr›   r   rŸ   rA   r=   r    r   r<   r;   )rF   rG   rH   rX   r?   r   r   rW   r^   r_   rD   r`   ra   rb   )rc   rd   rn   rm   rl   ro   rp   rp   rq   rE     s    
zCountryAPIView.getN)rs   rt   ru   rF   rG   rH   ÚquerysetZCountrySerializerrX   rr   rE   rp   rp   rp   rq   rž   ñ  s   
rž   c                   @   s*   e Zd ZeZejfZdd„ Zddd„Z	dS )ÚSubscriptionAPIViewc              
   C   sÀ   zf|j d |j d< | j|j d�}| ¡ rN| ¡  dd|j dœ}t|tjd�W S dd	d
œ}t|tjd�W S  tk
rº } z6t 	dt
|ƒ ¡ dtd d
œ}t|tjd� W Y ¢S d }~X Y nX d S )NÚuser_idrn   r>   r   z%Subscription Record Found Successful.rA   r=   r   z	Invailid.r;   úSubscriptionAPIView:error => r<   r¡   ©rc   rd   rm   rl   ro   rp   rp   rq   rr     s    
zSubscriptionAPIView.postNc              
   C   sÒ   zx|d k	rDt jj|d�}| j|dd�}dd|jdœ}t|tjd�W S t j ¡ }| j|dd�}dd|jdœ}t|tjd�W S  t	k
rÌ } z6t
 d	t|ƒ ¡ d
td dœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr5   Fr›   r   z,Subscription User Record Found Successfully.rA   r=   Tr¦   r   r<   r;   )ÚSubscriptionrG   rE   rX   r?   r   r   r�   rH   r^   r_   rD   r`   ra   rb   r�   rp   rp   rq   rE   &  s    
zSubscriptionAPIView.get)N)
rs   rt   ru   ZSubscriptionSerializerrX   r   r   r“   rr   rE   rp   rp   rp   rq   r¤     s   r¤   c                   @   sB   e Zd ZeZeZeZeefZ	dd„ Z
d
dd„Zdd„ Zdd	„ ZdS )ÚMagazineProfileAPIViewc                 C   s$   | j jdkrtS | j jdkr tS d S )NÚPOSTÚPUT)rd   ÚmethodÚMagazineProfileSerializerÚUpdateProfileSerializer)rc   rp   rp   rq   Úget_serializer_class?  s    z+MagazineProfileAPIView.get_serializer_classNc              
   C   sÜ   z‚| j j dd ¡}|rPtjj|d�}t|dd�}dd|jgdœ}t|tj	d�W S tj 
¡ }t|d	d�}dd|jdœ}t|tj	d�W S  tk
rÖ } z6t d
t|ƒ ¡ dtd dœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr¥   r5   Fr›   r   z-All user profile records found Successfully. rA   r=   Tú MagazineProfileAPIView:error => r   r<   r;   )rd   ÚGETrE   rQ   rG   ÚGetMagazineProfileSerializerr?   r   r   r�   rH   r^   r_   rD   r`   ra   rb   )rc   rd   r6   r¥   rn   rm   rl   ro   rp   rp   rq   rE   E  s    
zMagazineProfileAPIView.getc              
   C   s  �zÀ|j }|d |d< |d |d< dg|d< d|d< g |d< d}d	 tjtj|d
�¡}||d< tj ¡ }|tdd� }||d< d}|d j	 
d¡d }||kr¸dddœ}	t|	tjd�W S | j|j d�}
tjj|d d� ¡ }|rúdddœ}	t|	tjd�W S tjj|d d� ¡ }|�r0dddœ}	t|	tjd�W S |
 ¡ �r¦|
jdddd� tjj|
j  dd ¡d� ¡ }|j|j|jdœ}t|ƒ ¡  d td! |
j d"œ}	t|	tjd�W S dd#|
jd"œ}	t|	tjd�W S  tk
�r } z6t d$t |ƒ ¡ dt!d! dœ}	t|	tj"d� W Y ¢S d }~X Y nX d S )%Nr   r   r   r'   r%   r&   r(   r)   r*   r+   r-   r.   r/   r1   ©ZjpgZpngr    Ú.éÿÿÿÿú*Image extention should be '.jpg' or '.png'r;   r=   r>   )Zemail__iexactzEmail already exists.r3   r4   zPhone number already exists.T)rR   rS   Úotp_varificationr@   r8   r   r<   rA   rB   r°   )#r?   rK   rL   rM   rN   rO   r   rP   r   r:   Úsplitr   r   rW   rX   rQ   rG   rI   rJ   rY   rZ   rE   r   r-   rU   r	   rV   r\   r]   r^   r_   rD   r`   ra   rb   )rc   rd   r?   rh   r-   rP   ri   Ú	valid_extÚ	extentionrl   rm   rn   Zphoneobjrk   ro   rp   rp   rq   rr   ]  sP    





zMagazineProfileAPIView.postc           
   
   C   sF  zê|j }|j  dd ¡}|rTd}|d j d¡d }||krTdddœ}t|tjd�W S |sf| ¡ }|d= tj	j|d	 d
�}|s–dddœ}t|tjd�W S t
||ƒ}| ¡ rÎ| ¡  dd|j dœ}t|tjd�W S dd|jdœ}t|tjd�W S  tk
�r@ }	 z6t dt|	ƒ ¡ dtd dœ}t|tjd� W Y ¢S d }	~	X Y nX d S )Nr    r³   r´   rµ   r   r¶   r;   r=   r¥   r5   zPlease enter valid user idr   z User has been update successful.rA   zUser has not been update.r°   r<   )r?   rE   r:   r¸   r   r   rW   ÚdictrQ   rG   r®   rY   rZ   r]   r^   r_   rD   r`   ra   rb   )
rc   rd   r?   Úprofiler¹   rº   rl   Zuseronjrm   ro   rp   rp   rq   Úputú  s6    


zMagazineProfileAPIView.put)N)rs   rt   ru   r²   rX   r­   r®   r   r   Úparser_classesr¯   rE   rr   r½   rp   rp   rp   rq   r©   9  s   
 r©   c                   @   s   e Zd ZeZdd„ ZdS )ÚMagazineContactsAPIViewc              
   C   s  zª|j }| dd ¡|d< t|j d�}| ¡ rŽ| ¡  tjj|j  dd ¡d� ¡ }|d |j	|j
dœ}t|ƒ ¡  dd|j d	œ}t|tjd
�W S dd|jd	œ}t|tjd
�W S  tk
�r  } z6t dt|ƒ ¡ dtd dœ}t|tjd
� W Y ¢S d }~X Y nX d S )Nr¥   r   r>   r   )r   )r   r<   r:   r   z(Contact User has been create successful.rA   r=   r   zUser has not been create data.z!MagazineContactsAPIView:error => r<   r;   )r?   rE   ÚContactsSerializerrY   rZ   Ú
ContactsUsrG   rI   rJ   r<   rU   r   rV   r   r   rW   r]   r^   r_   rD   r`   ra   rb   )rc   rd   r?   rm   rn   rk   rl   ro   rp   rp   rq   rr   "  s"    zMagazineContactsAPIView.postN)rs   rt   ru   rÀ   rX   rr   rp   rp   rp   rq   r¿     s   r¿   c                   @   s"   e Zd ZeZdd„ Zddd„ZdS )ÚMasterCurrencyAPIViewc              
   C   s¸   z^| j |jd�}| ¡ rB|jdd� dd|jdœ}t|tjd�W S dd	|jdœ}t|tjd�W S  tk
r² } z6t	 
d
t|ƒ ¡ dtd dœ}t|tjd� W Y ¢S d }~X Y nX d S )Nr>   T)Úcurrency_statusr   z)Master Currency Record Create Successful.rA   r=   r   z%Master currency record is not create.úMasterCurrencyAPIView:error => r<   r;   )rX   r?   rY   rZ   r   r   rW   r]   r^   r_   rD   r`   ra   rb   r§   rp   rp   rq   rr   C  s    zMasterCurrencyAPIView.postNc              
   C   s�   z6t j ¡ }| j|dd�}dd|jdœ}t|tjd�W S  tk
rŠ } z6t	 
dt|ƒ ¡ dtd	 d
œ}t|tjd� W Y ¢S d }~X Y nX d S )NTr›   r   z*Master Currency Record Found Successfully.rA   r=   rÄ   r   r<   r;   )ÚMasterCurrencyrG   rH   rX   r?   r   r   r�   r^   r_   rD   r`   ra   rb   r�   rp   rp   rq   rE   R  s    
zMasterCurrencyAPIView.get)N)rs   rt   ru   ZMasterCurrencySerializerrX   rr   rE   rp   rp   rp   rq   rÂ   ?  s   rÂ   )Ar   Údjango.shortcutsr   Úrest_frameworkr   r   r   Úrest_framework.responser   Úuritemplater   Zbase.threadsr   r	   r
   r   Zmagazine.utilsr   r   r   ÚmodelsÚserializersZmagazineapp.modelsZmagazineapp.serializersÚloggingÚ	getLoggerrs   r_   Údjango.corer   Zrest_framework.permissionsr   Údjango.confr   Údjango.contrib.auth.hashersr   Údjango.db.modelsr   Útestsr   ZjwtÚdjango.core.mailr   r   rL   rN   ÚrequestsZbase_messager   r   Zrest_framework.parsersr   r   ZGenericAPIViewr   rw   r�   r”   r˜   rš   rž   r¤   r©   r¿   rÂ   rp   rp   rp   rq   Ú<module>   sV   
 J9M  23!' g 