a
    )d7                     @   s  d dl mZm Z mZ 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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*m+Z+ d dl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5 d dl6T d dl)T e Z7edeeede.iddG dd deee$Z8G dd de"Z9e9: Z;G d d! d!e"Z<e<: Z=G d"d# d#e"Z>e>: Z?G d$d% d%e"Z@e@: ZAG d&d' d'e"ZBeB: ZCG d(d) d)e"ZDeD: ZEdS )*    )datedatetime	timedeltaN)settings)get_user_model)EmailMultiAlternatives)method_decorator)openapi)swagger_auto_schema)
exceptionsstatus)action)ListModelMixinUpdateModelMixin)AllowAny)Request)Response)HTTP_200_OKHTTP_400_BAD_REQUEST)APIView)GenericViewSet)send_cancel_email)CompanySerializer)CompanySubscription)ContactSerializerUserSerializerUserUpdateSerializerAddShopifyUrlSerializerLogoutShopifyUrlSerializerGetUserByShopifySerializerPurchasePlanSerializer)ChangePasswordSerializer)*listzCurrent user details)	responses)name	decoratorc                       s   e Zd Zej ZeZ fddZ	 fddZ
dd Zeddgd	ed
ddZeddgdded
ddZeddgd	dd Zeddgd	dd Z  ZS )CurrentUserViewSetc                    s4   | j dv rtS | j dkrtS | j dv r*tS t  S )N)	companiescompanies_v1change_password)updatepartial_update)r   r   r"   r   superget_serializer_classself	__class__ A/var/www/html/Ranjet/backend/verify_trusted/users/api/views/me.pyr/   8   s    


z'CurrentUserViewSet.get_serializer_classc                    s   | j dv r| jjS t  S )N)r$   r+   )r   requestuserr.   
get_objectr0   r2   r4   r5   r8   A   s    
zCurrentUserViewSet.get_objectc           	      O   s   |   }| |}tjj|jd }|j}|d ur>|j|d< t|d dkrd|d d d< d |d d d< |d d d rt	jj|d d d	 d
 }|d ur|j
t k|d d d< |jd u |d d d< |j
|d d d< t|S )Nuser_idcompanyr)   r   Fis_trialdue_dateis_verifiedidr;   	is_expire)r8   get_serializerr   objectsfilterr?   firstdatalenr   r=   r   todaypaymentr   )	r1   r6   argskwargsinstance
serializerr;   response_datasubscriptionr4   r4   r5   r$   F   s$    


zCurrentUserViewSet.listFGET)detailmethods)r6   c           	      O   s   |j }|j }|std S | |}|j}|jrVt|jdrVd|jjv rV|jj|d< t	|dkrd|d< d|d< d |d	< |d
 rt
jj|d d }|d ur|jt k|d< |jd u |d< |j|d	< t|S Nr&   httplogor   TrA   Fr<   r=   r>   r?   r@   r7   r)   rE   r   rB   rF   rU   hasattrr&   rG   r   rC   rD   r=   r   rH   rI   	r1   r6   rJ   rK   r7   r;   rM   rN   rO   r4   r4   r5   r)   Z   s4    





zCurrentUserViewSet.companieszcompanies-v1)rQ   rR   url_pathc           	      O   s   |j }|j }|stg S | |}|j}|jrVt|jdrVd|jjv rV|jj|d< t	|dkrd|d< d|d< d |d	< |d
 rt
jj|d d }|d ur|jt k|d< |jd u |d< |j|d	< t|gS rS   rV   rX   r4   r4   r5   r*   v   s4    





zCurrentUserViewSet.companies_v1POSTc                 O   sz   |   | _| j|jd}| rl| j|jd s@tddi| j	|jd  | j
  ddi}t|S t|jtdS )NrF   old_passwordZMSG019Znew_passwordmessageZMSG000r   )r8   objectrB   rF   is_validcheck_passwordvalidated_datar   ValidationErrorset_passwordsaver   errorsr   )r1   r6   rJ   rK   rM   responser4   r4   r5   r+      s    

z"CurrentUserViewSet.change_passwordc                 O   s`   | j j}tjj|jd }|d ur8d |_d|_|  d|_	|  t
|j|j tddiS )Nr9   FsuccesszSuccessful deactive)r6   r7   r   rC   rD   r?   rE   r>   re   	is_activer   emailurlr   )r1   r6   rJ   rK   r7   r;   r4   r4   r5   deactive   s    zCurrentUserViewSet.deactive)__name__
__module____qualname__UserrC   allquerysetr   serializer_classr/   r8   r$   r   r   r)   r*   r+   rl   __classcell__r4   r4   r2   r5   r(   (   s   
	#
r(   c                   @   s   e Zd ZeZegZdd ZdS )ContactViewSetc                 C   s   t |jd}|jdd tjr(g d}ntj}td|jd  d|jd  d	t	  d
|jd  d|jd  d|jd  d|jd  
tj
|}|  tdditjdS )Nr[   Traise_exception)zinfo@verifytrusted.comz#verifytrusted.support@sphinxjsc.comzadmin@verifytrusted.comzdoanthanh58863@gmail.comz
[Contact] r&   z - rj   zDate: z
Name: z 
Emcount_user_signed_up_setail: z

Website: websitez

Message: r]   zSuccessfully activatedr^   )r   rF   r`   r   IS_PRODUCTIONDEFAULT_SEND_TO_EMAILr   rb   r   nowDEFAULT_FROM_EMAILsendr   r   r   )r1   r6   rM   send_to_emailmsgr4   r4   r5   post   s    
<
zContactViewSet.postN)rm   rn   ro   r   rs   r   permission_classesr   r4   r4   r4   r5   ru      s   ru   c                   @   s   e Zd ZeZegZdd ZdS )AddTokenWithShopifyc                 C   s   | j |jd}|jdd |jd}|jd}|jd}|r|tjj|d }|rn||_	||_
|  ntdd	d
S tddd
S )Nr[   Trv   connect_tokenshopify_urlshopify_token)r     zThis token is invalidcoder]      Request processed successfully)rs   rF   r`   rb   getProfilerC   rD   rE   r   r   re   r   )r1   r6   rM   r   r   r   profiler4   r4   r5   r      s    
zAddTokenWithShopify.postN)rm   rn   ro   r   rs   r   r   r   r4   r4   r4   r5   r      s   r   c                   @   s   e Zd ZeZegZdd ZdS )CheckUserShopifyc                 C   sl   | j |jd}|jdd |jd}|r^tjj|d }|r^|j	}t
|}td|jdS tdd	d
S )Nr[   Trv   r   )r   r   )r   rF   r   zUser not foundr   )rs   rF   r`   rb   r   r   rC   rD   rE   r7   r   r   )r1   r6   rM   r   r   r7   r4   r4   r5   r      s    zCheckUserShopify.postN)rm   rn   ro   r    rs   r   r   r   r4   r4   r4   r5   r      s   r   c                   @   s   e Zd ZeZegZdd ZdS )LogoutShopifyc                 C   sz   | j |jd}|jdd |jd}|jd}|rltjj||d }|r^d |_	|
  ntddd	S td
dd	S )Nr[   Trv   r   r   )r   r   r   zRequest processed failedr   r   r   )rs   rF   r`   rb   r   r   rC   rD   rE   r   re   r   )r1   r6   rM   r   r   r   r4   r4   r5   r     s    
zLogoutShopify.postN)rm   rn   ro   r   rs   r   r   r   r4   r4   r4   r5   r   	  s   r   c                   @   s   e Zd ZeZegZdd ZdS )PurchasePlanc                 C   s   | j |jd}|jdd |jd}|jd}|jd}tjj|d }t	jj|d }|stt
dd	d
S |st
ddd
S tjj||d}|rtjj|dj|t tdd d}	tjj|jdj|d}
nt
ddd
S t
ddd
S )Nr[   Trv   plan_id
company_id	charge_id)r?   r   zNo plan foundr   zNo company found)r;   planr@      days)rI   r=   r7   )r   zSomething went wrongr   r   )rs   rF   r`   rb   r   PlanrC   rD   rE   r   r   Paymentcreater   r,   r   rH   r   r   r7   )r1   r6   rM   r   r   r   r   r;   rI   subscription_objr   r4   r4   r5   r   #  s"    	&zPurchasePlan.postN)rm   rn   ro   r!   rs   r   r   r   r4   r4   r4   r5   r     s   r   c                   @   s   e Zd ZegZdd ZdS )RecurringPlanc                 C   s   t jjdd}|D ]}|jr|j}|j}d| d| d}d|ji}tj||d}|jdkr|	 }	|	d	 d
 }
|
dkr|	d	 d }t
|d }tjj|jd }tjj|dj|tdd d}qqtddiS )NT)activezhttps://z1/admin/api/2023-04/recurring_application_charges/z.jsonzX-Shopify-Access-Token)headersr   Zrecurring_application_charger   r   activated_onz%Y-%m-%dr   r@   r   r   )r=   r]   z0Shopify API access completed for eligible users.)r   rC   rD   r   r   r   requestsr   status_codejsonr   strptimer   r   r7   rE   r   r,   r   r   )r1   r6   usersr7   r   r   Zshopify_api_urlr   rg   rF   Zpayment_statusr   r;   r   r4   r4   r5   r   E  s$    

"zRecurringPlan.getN)rm   rn   ro   r   r   r   r4   r4   r4   r5   r   C  s   r   )Fr   r   r   r   django.confr   django.contrib.authr   django.core.mailr   django.utils.decoratorsr   drf_yasgr	   drf_yasg.utilsr
   rest_frameworkr   r   rest_framework.decoratorsr   rest_framework.mixinsr   r   rest_framework.permissionsr   rest_framework.requestr   rest_framework.responser   Zrest_framework.statusr   r   rest_framework.viewsr   rest_framework.viewsetsr   verify_trusted.utilsr   (verify_trusted.companies.api.serializersr   verify_trusted.companies.modelsr   r   $verify_trusted.users.api.serializersr   r   r   r   r   r    r!   Z4verify_trusted.users.api.serializers.change_passwordr"   Zverify_trusted.users.modelsrp   r(   ru   as_viewcontact_viewr   shopify_url_viewr   check_shopify_url_viewr   logout_shopify_url_viewr   purchase_plan_url_viewr   recurring_plan_url_viewr4   r4   r4   r5   <module>   sb   $	
 !