
    NhP                       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T ddl	T d dl
mZ ddlT 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mZmZ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)m*Z* d dl mZm+Z+ d dlmZmZ d dl,m-Z- ddl.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl,m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@mAZA d dlBmCZC d d lDmEZE d d!lFmGZG d d"lHZHd d#lImJZJ d d$lKmLZLmMZM d dlNT d d%lOmPZPmOZOmQZQ d d"lRZRd d&lSmTZT d d'lUmVZV  eHjW        eX          ZYd( ZZ G d) d*e:          Z[d+ Z\ G d, d-ej]                  Z^ G d. d/ej]                  Z_ G d0 d1ej]                  Z` G d2 d3ej]                  Za G d4 d5ej]                  Zb G d6 d7ejc                  Zd G d8 d9ej]                  Ze G d: d;e:          Zf G d< d=ejc                  Zg G d> d?ej]                  Zh G d@ dAejc                  Zi G dB dCej]                  Zj G dD dEejc                  Zk G dF dGej]                  Zl G dH dIe:          Zm G dJ dKe:          Zn G dL dMe:          Zo G dN dOej]                  Zp G dP dQejc                  Zq G dR dSej]                  Zr G dT dUej]                  Zs G dV dWejc                  Zt G dX dYej]                  Zu G dZ d[ejc                  Zv G d\ d]ej]                  Zw G d^ d_ej]                  Zx G d` daej]                  Zy G db dcej]                  Zz G dd deej]                  Z{ G df dgej]                  Z| G dh diejc                  Z} G dj dkej]                  Z~ G dl dmejc                  Z G dn doej]                  Z G dp dqej]                  Zd"S )r    )render)viewsetsstatus)get_object_or_404)FavProductViewSet   )*)Response)Mail)SendGridAPIClient)settings)ObjectDoesNotExist)geodesic)
ProductSerBuyerProductSerProductListingSer)Product
FavProductCategoriesPlanPlanPurchaseCategoryCategoriesPlanDuration)action)PageNumberPagination)messages)check_passwordmake_password)r   redirect)AllowAny)CustomJWTAuthentication)cache_response)RefreshToken)IsAuthenticated)
Permission)authenticate)APIView)ValidationError)CustomPagination)QSubquery)now)relativedelta)IntegrityErrorN)ShoppingPoint)send_referrer_reward_emailsend_referred_reward_email)	timedeltadatetimetime)HttpResponse)cachec                     	 t          j        ddd           t          j        d          }|dk    rt          d          S t          d          S # t          $ r}t          d|           cY d }~S d }~ww xY w)Ntest_key
test_value
   )timeoutzSuccessfully connected to RediszFailed to connect to RediszError: )r5   setgetr4   	Exception)requestvaluees      ,/var/www/html/e360mart/login_signup/views.py
test_redisrB   8   s    +	*lB7777	*%%L   ABBB <=== + + +MaMM********+s#   ?A A 
A7A2,A72A7c                       e Zd Zd ZdS )VerifyReCaptchac                 x   |j                             d          }t          j        }|st	          ddit
          j                  S t                              d||d          }|	                                }|                    d          rt	          dd	i          S t	          dd
it
          j                  S )NtokenmessagezreCAPTCHA token is required!r   z/https://www.google.com/recaptcha/api/siteverify)secretresponsedatasuccesszreCAPTCHA verified!zreCAPTCHA failed!)
rL   r<   r   RECAPTCHA_SECRET_KEYr
   r   HTTP_400_BAD_REQUESTrequestspostjson)selfr>   argskwargsrF   recaptcha_secretrJ   results           rA   rQ   zVerifyReCaptcha.postD   s      ))#8 	mY(FGPVPkllll===,%@@ ! 
 

 ::i   	bY(=>???Y(;<VE`aaaa    N)__name__
__module____qualname__rQ    rX   rA   rD   rD   C   s(        b b b b brX   rD   c                 r    t          j        |           }t          |          t          |j                  dS )N)refreshaccess)r"   for_userstraccess_token)userr^   s     rA   get_tokens_for_userrd   W   s:    #D))G w<<g*++  rX   c                   J    e Zd Zej                                        ZeZe	gZ
dS )GroupCreateViewN)rY   rZ   r[   GroupobjectsallquerysetGroupSerializerserializer_classr   permission_classesr\   rX   rA   rf   rf   `   s1        }  ""H& zrX   rf   c                   D    e Zd ZeZd Z e            d             Zd ZdS )VendorUserPermissionViewSetc                 F    t           j                            d          }|S )NT	is_vendor)Userrh   filter)rS   rj   s     rA   get_querysetz(VendorUserPermissionViewSet.get_querysetm   s    <&&4&88rX   c                     |                                                      d          }t          |d          }t          |j        t
          j                  S )N-idTmanyrH   )ru   order_byVendorProfileSerr
   rL   r   HTTP_200_OKrS   r>   rT   rU   rj   
serializers         rA   listz VendorUserPermissionViewSet.listq   sM    $$&&//66 &ht<<<

0BCCCCrX   c                     |                      |j                  }|                    d           |                                 t	          ddit
          j                  S )NrK   Traise_exceptionmsgz Permissions updated successfullyrH   )get_serializerrL   is_validsaver
   r   r|   )rS   r>   rT   rU   r~   s        rA   createz"VendorUserPermissionViewSet.create~   s_    (((==
d333 	AB&J\]]]]rX   N)	rY   rZ   r[   UserPermissionSerrl   ru   r!   r   r   r\   rX   rA   ro   ro   g   sf         )   ^	D 	D 	D^ ^ ^ ^ ^rX   ro   c                   t    e Zd Zej                            d          ZeZd Z	 e
            d             ZdS )AdminRegisterviewsetTis_superuserc                    t                      }|j                                        }||d<   |                     |          }|                    d           |j        }t          j                            |d         |          }|	                    d          }	|	r|	|_
        |                                 |j        d         }
d}d	|
 d
| d}d}| d| }|||
d}	 t          |           nG# t          $ r:}t          dd                    |          it           j                  cY d }~S d }~ww xY wt          d|dt           j                  S )NpasswordrK   Tr   email)r   r   	full_namezYour admin account credentialsz~
            <p>Your admin account has been created successfully.</p>
            <p>
                <strong>Email:</strong> z0<br>
                <strong>Password:</strong> z
            </p>
            zK<a href="https://admin.e360mart.com/sign-in/" target="_blank">Login URL</a>z
</br></br>subjectbodyto_emailr   z7Admin user created, but failed to send email. Error: {}rH   zAdmin user created successfully)r   r   )generate_strong_passwordrL   copyrl   r   validated_datars   rh   create_superuserr<   r   r   
send_emailr=   r
   formatr   HTTP_201_CREATED)rS   r>   rT   rU   generated_passwordrL   r~   r   
admin_userr   r   r   r   html_contentfull_messager@   s                   rA   r   zAdminRegisterviewset.create   s   577|  ""-Z***55
D111#2\229P# 3 & &
"&&{33	 	#,J OO)'22 */  -?	   e88,88
 

	J
T



 	J 	J 	JU$]$d$def$g$ghqw  rI  J  J  J  J  J  J  J  J  J	J 4*
 
 )+ + + 	+s   !C1 1
D5;/D0*D50D5c                     |                                                      d          }|                     |d          }t          d|j        dt
          j                  S )Nrw   Trx   zAdmin list fetched successfullyr   rL   rH   ru   rz   r   r
   rL   r   r|   r}   s         rA   r   zAdminRegisterviewset.list   s[    $$&&//66(((==
 A:?[[djdvwwwwrX   N)rY   rZ   r[   rs   rh   rt   rj   AdminRegisterserrl   r   r!   r   r\   rX   rA   r   r      sk        |"""55H'(+ (+ (+R ^x x x x xrX   r   c                   t    e Zd Zej                            d          ZeZd Z	 e
            d             ZdS )AdminLoginViewSetTr   c                    |                      |j                  }|                    d           |j                            d          }|j                            d          }t
          j                            |d                                          }|d k    rt          ddit          j        	          S t          ||j                  st          dd
it          j        	          S t
          j                            |                                          }t          |          }	t!          |          }
t          d|
|	j        dt          j        	          S )NrK   Tr   r   r   )r   r   r   z'Admin user with this email id not existrH   Incorrect passwordr   Login successfulr   rF   rL   )rl   rL   r   r   r<   rs   rh   rt   firstr
   r   HTTP_404_NOT_FOUNDr   r   rO   UserProfileSerializerrd   r|   )rS   r>   rT   rU   r~   r   r   r   admin_user_obj	admin_serrF   s              rA   r   zAdminLoginViewSet.create   s?   **',*??
D111)--g66,00<<\((D(IIOOQQ
U#LMU[Unoooohz':;; 	]U#78@[\\\\,,U,;;AACC).99	#N3315XX`f`rssssrX   c                     t           j                            dd          }|                     |d          }t	          |j        t          j                  S )NF)rr   is_buyerTrx   rH   )rs   rh   rt   rl   r
   rL   r   r|   r}   s         rA   r   zAdminLoginViewSet.list   sL    <&&5U&KK**8$*??

v/ABBBBrX   N)rY   rZ   r[   rs   rh   rt   rj   AdminLoginSerrl   r   r!   r   r\   rX   rA   r   r      sm        |"""55H$t t t, ^C C C C CrX   r   c                   J    e Zd Zej                                        ZeZd Z	dS ) AdminPasswordResetRequestViewSetc                    |                      |j                  }|                    d           |j                            d          }t
          j                            |                                          }|d k    rt          ddit          j                  S t                      }||_        |                                 d	|z   }d
|||d}	t          |	           t          d| d|dt          j                  S )NrK   Tr   r   r   r   %Email not registered. Please sign up.rH   	OTP is : z&e360 Mart OTP for Admin password resetr   r   r   otpzOTP sent on z for admin password resetr   r   rl   rL   r   r   r<   rs   rh   rt   r   r
   r   r   generate_otpr   r   send_email_otpr|   )
rS   r>   rT   rU   r~   r   r   r   r   rL   s
             rA   r   z'AdminPasswordResetRequestViewSet.create   s   **',*??
D111)--g66\(((77==??
U#JKSYSlmmmm nn 
 C ?	
 
 	tNeNNNVYZZbhbtuuuurX   N)
rY   rZ   r[   rs   rh   ri   rj   AdminPasswordResetRequestSerrl   r   r\   rX   rA   r   r      sA        |!!H3v v v v vrX   r   c                       e Zd ZeZd ZdS )AdminPasswordResetViewSetc                 b   |                      |j                  }|                    d           |j                            d          }|j                            d          }|j                            d          }t
          j                            |          }|j        dk    rt          d	d
it          j
                  S ||k    rt          d	dit          j
                  S |                    |           |                                 t          d	dit          j                  S )NrK   Tr   r   r   confirm_passwordr   Fr   OTP not verifiedrH   z-Password and confirm password does not match.zPassword reset successfully )rl   rL   r   r   r<   rs   rh   otp_verifiedr
   r   rO   set_passwordr   r|   )	rS   r>   rT   rU   r~   r   r   r   r   s	            rA   r   z AdminPasswordResetViewSet.create  s&   **',*??
D111)--g66,00<<%4889KLL \%%e%44
 "e++U$67@[\\\\'''U$ST]c]xyyyy 	)))>?vGYZZZZrX   N)rY   rZ   r[   AdminPasswordResetSerrl   r   r\   rX   rA   r   r     s.        ,[ [ [ [ [rX   r   c                   T    e Zd Zej                            d          ZeZd Z	d Z
dS )VendorRegisterViewSetTrq   c                 B   |j                                         }|                     |j                   }|                    d           |j                            d          }t                      }|                                }||_        d|_	        |                                 d|z   }	d|	||d}	 t          |           n,# t          $ r}
t          d	d
|
 di          cY d }
~
S d }
~
ww xY wt          |          }d|d}t          |t          j                  S )NrK   Tr   r   Fr   e360 Mart OTP for Registrationr   errorz	
  ***** z ***** 
OTP sent successfully)r   rF   rH   )rL   r   r   r   r   r<   r   r   r   	is_activer   r=   r
   rd   r   r|   )rS   r>   rT   rU   rL   r~   r   r   vendorr   r@   rF   response_datas                rA   r   zVendorRegisterViewSet.create4  sU   |  ""* (((==
d333)--g66nn""
 !C6	
 
	A4     	A 	A 	AW%>!%>%>%>?@@@@@@@@	A#F++ +
 
 f.@AAAAs   6C 
C/C*$C/*C/c                 	   |                                  }t          d           t          d|j        j         d|j                    i }|j        D ]}|j        |         ||<   |                    dd           }t          d|           t          d|           d|v r7	 t          |d                   |d<   n# t          $ r t          d          w xY wd	|v r7	 t          |d	                   |d	<   n# t          $ r t          d
          w xY w| 	                    ||d          }	 |
                    d           ni# t          $ r\}	t                              d|	j         d|j        j                    t          d|	j        dt          j                  cY d }	~	S d }	~	ww xY wd|v r |d         |_        	 |                                }
t                              d|j        j                    d|j        |j        d}t-          |           t                              d|j                    t/          |
          }d||j        d}|}t                              d|            t                              d|            |rt1          |t2                    rt5          |d                   nt5          |          }t6          j                            |          }|r;t<          j                            |d                                           }tB          j                            |                                            }tD          j                            |
|d!d"#          #                                }|stI                      %                                }|tM          d$%          z   }|j'        r|j'        nd&}tD          j        (                    |
|||d$||j)                            d'd(          |||j)                            d)d"          d!*          }t          |t          j*                  S # tV          $ r^}	t                              d+|j        j         d,tY          |	                      t          d-d.it          j-                  cY d }	~	S d }	~	ww xY w|                                }
t/          |
          }d/||j        d}t          |t          j*                  S )0Nz ==========Vendor Update=========z&API called for partial update by user z with data: main_categoryzdata----------zmain_category_id----------latzInvalid latitude value.longzInvalid longitude value.TrL   partialr   zValidation error: z
 for user zValidation failed.)rG   r   rH   is_documentz'Document updated successfully for user z%e360 Mart: Account under verification)r   namer   zVerification email sent to z$Documents are uploaded successfully!)r   rF   	user_datazMain Category zMain Category Id r   idFREEr   r   category_planactive
successfulr   r   r   payment_status   monthsr   amount        r   )r   r   categories_planplan_durationduration_monthsproduct_limitr   
start_dateend_dater   r   z!Error updating document for user : r   z.An error occurred while updating the document.z!Your profile updated successfully).
get_objectprintrc   r   rL   popfloat
ValueErrorr'   r   r   loggerr   detailr
   r   rO   r   r   infor   r   send_user_verifyrd   
isinstancer   intMainCategoryrh   r<   r   rt   r   r   r   existsr+   dater,   r   r   r   r|   r=   ra   HTTP_500_INTERNAL_SERVER_ERROR)rS   r>   rT   rU   instancerL   keymain_category_idr~   r@   r   
email_datarF   r   r   r   category_durationexisting_planr   r   r   purchases                         rA   partial_updatez$VendorRegisterViewSet.partial_update  s   ??$$0111bw|bbT[T`bbccc < 	* 	*CS)DII88OT::%%%*,<=== D==A#DK00U A A A%&?@@@A T>>B$T&\22V B B B%&@AAAB ((d(KK
	35555 	3 	3 	3LLSahSS',/SSTTT/  13 3 3 3 3 3 3 3 3	3 D  #'#6H BK#**WgloWWXXX  G$. ( 

 !,,,J(.JJKKK+F33 B"!+! ! !1<]<<===B0@BBCCC $ !CMN^`dCeCe  (As+;A+>'?'?'?kno  lA  lA$$0$8$<$<@P$<$Q$QM$ *8*@*G*GVcjp*G*q*q*w*w*y*y,B,J,Q,Q`o,Q,p,p,v,v,x,x)(4(<(C(C#)xht )D ) ) &(( &  - ),J'1M4K4K4K'KHO`On,u,=,K,KtuM'3';'B'B'-.;0?.?01.;'1'@'D'DXt'T'T+5)1/9/H/L/LM]_k/l/l'/ (C ( (H  f6HIIII K K K\\\TWXYTZTZ\\]]]*Z [dj  eJ  K  K  K  K  K  K  K  K  KK8  __&&F'//E ;&O M
 M&2DEEEEsW   B8 8CC3 3D)E   
F&
AF!F&!F&<JQ 
R+AR& R+&R+N)rY   rZ   r[   rs   rh   rt   rj   VendorRegisterSerrl   r   r  r\   rX   rA   r   r   /  s^        |""T"22H(?B ?B ?BzP P P P PrX   r   c                       e Zd ZegZd ZdS )FreePlanPurchaseViewc                 :   |j         }|j        st          dddt          j                  S |j                            d          }|st          dddt          j                  S 	 t          |t                    rt          |d                   nt          |          }t          j                            |          }n3# t          j        $ r! t          dd	dt          j                  cY S w xY wt          j                            |d
                                          }|st          dddt          j                  S t"          j                            ||dd                                          }|rt          dddt          j                  S t'                                                      }|t+          d          z   }t"          j                            |||ddd||dd
  
        }	t          dd|	j        dt          j                  S )NFz&Only vendor has purchase subscription.r   r   rH   r   zMain category is required.r   r   zInvalid main category ID.r   r   z*Free plan not available for this category.r   r   r   z2You already have an active plan for this category.r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   Tz!Free plan purchased successfully.)r   rG   plan_id)rc   rr   r
   r   rO   rL   r<   r   r   r   r   rh   DoesNotExistr   rt   r   r   r   r   r+   r   r,   r   r   r   )
rS   r>   r   r   r   r   r  r   r   r  s
             rA   rQ   zFreePlanPurchaseView.postH  s    	Ee6^__hn  iD  E  E  E  E"<++O<< 	ye6RSS\b\wxxxx	x;EFVX\;];]xs#3A#6777cfgwcxcx(0448H4IIMM( 	x 	x 	xe6QRR[a[vwwwwww	x )077mZ`7aaggii 	Ge6bcclr  mF  G  G  G  G$,33xXd 4 
 

&(( 	  	Qe6jkktz  uP  Q  Q  Q  QUUZZ\\
Q 7 7 77'..'+!' / 
 
 'JW_Wbcc*
 
 
 	
s   (AC -C21C2NrY   rZ   r[   r#   rm   rQ   r\   rX   rA   r  r  E  s,        )*.
 .
 .
 .
 .
rX   r  c                   "    e Zd ZegZeZeZd Z	dS )VendorListingc                    |j         j        r|j         j        st          ddit          j                  S |j                            d          }|j                            d          }|j                            d          }t          j	        
                    d          }|rE|
                    t          |	          t          |
          z  t          |          z            }|r+|r(t          j        d          }	 |                    t          j        t          j        |d                                          t&          j                            }	|                    t          j        t          j        |d                                          t&          j                            }
|
                    |	|
f          }t,                              d|j                    n*# t2          $ r t,                              d           Y nw xY w|                                 }|                    |||           }|                     |d||j         d          }|                    |j                  S )Nr   #Only Admin Can Access This EndpointrH   searchr   r   Trq   full_name__icontainsphone__icontainsemail__icontainsAfrica/Dar_es_Salaam%Y-%m-%dcreated_at__rangezFinal query: zInvalid datetime format.viewr>   rc   ry   context)rc   r   r   r
   r   HTTP_403_FORBIDDENquery_paramsr<   rs   rh   rt   r)   pytztimezonelocalizer2   combinestrptimer   r3   minmaxr   r   queryr   pagination_classpaginate_querysetrl   get_paginated_responserL   )rS   r>   rT   rU   r  r   r   rj   tzstart_dtend_dt	paginatorpaginated_vendorr~   s                 rA   r   zVendorListing.list}  sk   |( 	0I 	@A0   
 %))(33)--l;;
'++J77<&&&66 	v...6***+6***+ H  	8( 	8 566B8;;x'78I*V`8a8a8f8f8h8hjnjr's'sttX%5h6GR\6]6]6b6b6d6dfjfn%o%opp#??h=O?PP<HN<<==== 8 8 86777778 ))++	$66xt6TT** '>> + 
 

 //
@@@s   C(G/ /$HHN)
rY   rZ   r[   r#   rm   r  rl   r(   r,  r   r\   rX   rA   r  r  x  s=        )*('4A 4A 4A 4A 4ArX   r  c                   J    e Zd Zej                                        ZeZd Z	dS )VendorOTPVerifyViewSetc                    |                      |j                  }|                    d           |j                            d          }t          |j                            d                    }t          j                            |          	                                }|d k    rt          ddit          j        	          S |j        |k    rt          dd
it          j        	          S t          |          }|j        }	|	|k    rd|_        |                                 t%          |          }
d|
|j        d}t          |t          j        	          S )NrK   Tr   r   r   r   r   z#User with this email does not existrH   Invalid OTPzOTP verified successfullyr   )r   rL   r   r   r<   r   rs   rh   rt   r   r
   r   r   r   rO   r   r   r   rd   r|   )rS   r>   rT   rU   r~   r   r   vendor_userr   
stored_otprF   r   s               rA   r   zVendorOTPVerifyViewSet.create  sT   (((==
d333)--g66*+//6677l))%)88>>@@$W%KLTZTmnnnn?c!!W]36;VWWWW '{33 _
'+K$ $K00 /;
 

 f.@AAAArX   N)
rY   rZ   r[   rs   rh   ri   rj   VendorRegisterOTPVerifySerrl   r   r\   rX   rA   r5  r5    sA        |!!H1$j $j $j $j $jrX   r5  c                   Z     e Zd Zej                                        ZeZ fdZ	d Z
 xZS )VendorLoginViewSetc                 \    t                                                      }| j        |d<   |S Nr>   superget_serializer_contextr>   rS   r!  	__class__s     rA   rA  z)VendorLoginViewSet.get_serializer_context  )    ''0022!\	rX   c                    |                      |j        d|i          }|                    d           |j                            d          }|j                            d          }t
          j                            |                                          }t          |d|i          }|d k    rt          d	d
it          j                  S |j        dk    rt          d	dit          j                  S |j        dk    rt          d	dit          j                  S t!          ||j                  st          d	dit          j                  S |j        dk    rt          d	dit          j                  S |j        dk    r#t          d|j        dt          j                  S |j        dk    r(|j        dk    rt          ddit          j                  S |j        dk    rU|j        dk    rJd|j         }	d|	|d}
t1          |
           t          d|j         |j        dt          j                  S |j        dk    rt          ddit          j                  S t
          j                            |                                          }t          |d|i          }t3          |          }t          d||j        dt          j                  S )Nr>   )rL   r!  Tr   r   r   r   r!  r   z(Vendor user with this email id not existrH   zIt seems you don't have an account here. Please create an account as a vendor using a different email that is not used on user appzrAdmin accounts cannot log in as vendors. Please use a different email that isn't associated with an admin account.r   Fr   zYour documents are not complete)r   document_datar   zIYour account is under admin verification. Please wait till admin approvalz'Your account is rejected.  Reason is : zAccount rejectedr   )r   rL   zYour is not approved by adminr   r   )rl   rL   r   r   r<   rs   rh   rt   r   r   r
   r   r   r   r   r"  r   r   rO   r   r   r   is_staffreasonsend_email_to_clientrd   r|   )rS   r>   rT   rU   r~   r   r   r8  rG  r   rL   vendor_user_obj
vendor_serrF   s                 rA   r   zVendorLoginViewSet.create  se   **',	SZG[*\\
D111)--g66,00<<l))%)88>>@@-k9WBUVVV$U#MNV\Vopppp%%U  $h  i  qw  qJ  K  K  K  K#T))U  $X  Y  ag  az  {  {  {  {h{';<< 	]U#78@[\\\\#u,,U$67@[\\\\"E))%FWdWijjrx  sN  O  O  O  O %''K,@%,G,GW%qr  {A  {V  W  W  W  W %''K,@$,F,FO;;MOOD-! D !&&&%c{Oa%c%ckxk}~~  GM  Gb  c  c  c  c&&W%DEVMhiiii,--e-<<BBDD*?IgCVWWW
#O441%
XX`f`rssssrX   )rY   rZ   r[   rs   rh   ri   rj   VendorLoginSerrl   rA  r   __classcell__rC  s   @rA   r<  r<    sg        |!!H%    
-t -t -t -t -t -t -trX   r<  c                   J    e Zd Zej                                        ZeZd Z	dS )!VendorPasswordResetRequestViewSetc                    |                      |j                  }|                    d           |j                            d          }t
          j                            |                                          }|d k    rt          ddit          j                  S t                      }||_        |                                 d	|z   }d
|||d}	t          |	           t          d|dt          j                  S )NrK   Tr   r   r   r   z0Vendor user with this credentials does not existrH   r   z'e360 Mart OTP for Vendor Password Resetr   zOTP sent sucessfullyr   r   )
rS   r>   rT   rU   r~   r   r8  r   r   rL   s
             rA   r   z(VendorPasswordResetRequestViewSet.create!  s   **',*??
D111)--g66 l))%)88>>@@$U#UV^d^wxxxx nn  C @	
 
 	t6cBB&J\]]]]rX   N
rY   rZ   r[   rs   rh   ri   rj   VendorPasswordResetRequestSerrl   r   r\   rX   rA   rQ  rQ    sA        |!!H4"^ "^ "^ "^ "^rX   rQ  c                       e Zd ZeZd ZdS )#VendorPasswordResetOTPVerifyViewSetc                    |                      |j                  }|                    d           |j                            d          }t          |j                            d                    }t          j                            |          }|j        }||k    r8d|_	        |
                                 t          ddit          j        	          S t          dd
it          j        	          S )NrK   Tr   r   r   r   r   z OTP verified successfullyrH   Incorrect OTPrl   rL   r   r   r<   r   rs   rh   r   r   r   r
   r   r|   rO   )	rS   r>   rT   rU   r~   r   r   r8  r9  s	            rA   r   z*VendorPasswordResetOTPVerifyViewSet.createM  s    **',*??
D111)--g66*+//6677l&&u&55 _
'+K$U#@AI[\\\\U?36;VWWWWrX   N)rY   rZ   r[   VendorPasswordResetOTPVerifySerrl   r   r\   rX   rA   rV  rV  G  s.        6X X X X XrX   rV  c                   J    e Zd Zej                                        ZeZd Z	dS )VendorPasswordResetViewSetc                 @   |                      |j                  }|                    d           |j                            d          }|j                            d          }|j                            d          }t
          j                            |                                          }|j	        dk    rt          d	d
it          j                  S |                    |           |                                 t          ddit          j                  S )NrK   Tr   r   r   r   r   Fr   rX  rH   r   zPassword reset successfullyrl   rL   r   r   r<   rs   rh   rt   r   r   r
   r   rO   r   r   r|   )	rS   r>   rT   rU   r~   r   r   r   
vendor_objs	            rA   r   z!VendorPasswordResetViewSet.createg  s   **',*??
D111)--g66,00<<%4889KLL\(((77==??
"e++W_5V=XYYYY)))=>fFXYYYYrX   N)
rY   rZ   r[   rs   rh   ri   rj   VendorPasswordResetSerrl   r   r\   rX   rA   r\  r\  b  sA        |!!H-Z Z Z Z ZrX   r\  c                       e Zd ZegZd ZdS )VendorSubscriptionProductwisec                 	   t           j                            d                              t	          t
          j                            d                              }	 g }|D ]}t                              d|j	                    t          j                            |j	                                      dd                                          }|rt          j                            |                              d	d                                          }t          t          d |                    }t                              d
|j	         d|            t          t!          |                    dk    rd}n|r	|d         }nd }nd}|s$t                              d|j	                    Ut$          j                            |          }||_        |                                 t                              d|j	         d|            t,          j                            |d                                          }	|	s$t                              d|j	                    t
          j                            ||dd                                          }
|
r,t                              d|j	         d|j	                    qt5                                                      }|t9          d          z   }t          j                            |j	        d                                          }t<          j                            |	                                          }|s$t                              d|	j	                    4|j        pd}t
          j                             |||	|d||d ||t
          j!        j"        d!           t                              d"|j	                    |#                    |j	        |$                                p|j%        |j	        |j&        d#d$           tO          d%|d&tP          j)        '          S # tT          $ r`}t                              d(tW          |           d)           tO          d*tW          |          itP          j,        '          cY d }~S d }~ww xY w)+NTrq   r   id__inProcessing vendor ID: rc   category_idflatr   zMain category IDs for vendor r   r      r   z"No main category found for vendor r   z!Main category assigned to vendor r   r   z%Free plan not available for category r   r   r   z&Active plan already exists for vendor z and category r   r   paid)rc   r   r   z#No duration found for FREE plan ID r   )r   r   r   r   r   r   products_addedr   r   r   r   r   z*Free plan successfully created for vendor )r   r   )	vendor_idvendor_namer   ,Vendors successfully subscribed to free planr   rH   Unexpected error: exc_infor   )-rs   rh   rt   excluder*   r   valuesr   r   r   r   values_listdistinctr   r   lenr;   warningr   r<   r   r   r   r   r   r   r+   r   r,   countr   r   r   PaymentStatusSUCCESSappendget_full_namer   r   r
   r   r|   r=   ra   r   )rS   r>   vendors_without_planr   r   category_idsmain_category_idsr   r   r   r  r   r   product_countr  r   r@   s                    rA   rQ   z"VendorSubscriptionProductwise.post}  s   #|22  3  
  

'L077AABB  
 
 	h	]M. ] ]@VY@@AAA&55695EEQQR_fjQkkttvv )(0(8(?(?+ )@ ) )!k"44k@@ & )-VD:K-L-L(M(M%KK `	 ` `M^ ` `aaa301122Q66+,((* 0+<Q+?((+/(( ()$' NN#S	#S#STTT , 4 8 8<L 8 M M'4$\	\\]\\]]]"0"8"?"?mbh"?"i"i"o"o"q"q& LL![IY![![\\\ , 4 ; ;!"/##/	 !< ! !
 &((  ! NN#wFI#w#wereu#w#wxxx UUZZ\\
%Q(?(?(?? ' 6 6FIV\ 6 ] ] c c e e %;$B$I$I"1 %J % %%'' " ) NN#]I[#]#]^^^ 1 ? D1$++!"/$3"3$%"/#0)%#/#=#E# ,     TTTUUU$$!'#)#7#7#9#9#MV=M+. - 2& && &     E%  (* * * *
  	] 	] 	]LL6c!ff66LFFFWc!ff-f6[\\\\\\\\\	]s     P Q! !
S+AS SSNr  r\   rX   rA   rb  rb  z  s6        )*o] o] o] o] o]rX   rb  c                       e Zd ZegZd ZdS )#VendorSubscriptionwiseProductActivec                 H	   t           j                            dd          }t                              d|            	 g }|D ]}|j        j        }t                              d|j                    t                              d|            t          j                            |dd                              d	          }|	                                }|j
        }t                              d
|           t                              d|           t                              d|           g }	g }
g }||k    r||z
  }t          |                    dd          d |                   }	t                              d|	           t          j                            |	                              d           n|dk    r||z
  }t          j                            |dd                              d          d |         }t          |                    dd                    }t                              d|           t          j                            |                              d           |r|j        r|j        j        j                                        dk    r|j        j        }|rt                              d|           t          j                            |dddd                              d	          d |         }t          |                    dd                    }
|
rOt          j                            |
                              d           t                              d|
           t          j                            |dd          	                                }||_        |                                 |                    ||j        |||j        r|j        j        nd |	pd |pd |
pd dd           t-          d|d t.          j                  S # t2          $ r`}t                              d!t7          |           d"           t-          d#t7          |          it.          j                  cY d }~S d }~ww xY w)$Nr   r   )r   r   zPlanPurchase IDs: zProcessing subscription ID: rf  rl  )user_idr   r   rw   u$   🧑‍💼 active product count: %su   🧑‍💼 new plan limit: %su%   🧑‍💼 new active plan count: %sr   Tri  u#   🧑‍💼 deactivate products: %srd  inactiverH   r   u#   🧑‍💼 reactivate products: %sr   u   🧑‍💼 Boosted Limit: %s	availableF)r  r   availability_statusr   
is_boosted)r  u   ✅ Boosted product IDs: %s)r   limitadded_productr   inactivated_productsactivated_productsboosted_products)rn  planrp  r   rq  rr  r   )r   rh   rt   r   r   r   r   r   rz   rz  r   r   rv  updater   r   r   upperboost_product_limitproduct_addedr   r}  r
   r   r|   r=   r   ra   r   )rS   r>   plan_purchaser   r  rn  active_paid_productsactive_paid_countr   extra_product_idsboosted_idsactivate_product_idsextra_countmissing_countinactive_paid_productsboosted_limitr  new_active_paid_countr@   s                      rA   rQ   z(VendorSubscriptionwiseProductActive.post  s   $,33<X`3aa888999_	]M% T T KN	D47DDEEE@Y@@AAA'.'='=%#)# (> ( ( (5//	 % %9$>$>$@$@! $ 2BDUVVV<mLLLCEVWWW$&! ')$$}44"3m"CK(,,88D8II,;,W) )% KK EGXYYYO**2C*DDKKS]K^^^^(A--(58I(I181G1G$-+1#- 2H 2 2 #(4..-	29. 044J4V4VW[bf4V4g4g/h/h,$IK_```..6J.KKRRZbRccc TD. T43E3S3X3^3^3`3`dj3j3j$($6$JM$ T$C]SSS+2?+A+A$-+10;#+', ,B , , #(5//.=.,:( '++;+G+GSW+G+X+X&Y&Y& T#O22+2FFMMY]M^^^"KK(E{SSS(/(>(>%#)# )? ) ) %''	 & &;"		 $$!*"g!.(=;?;M W 2 7 7SW0A0IT.B.Jd,7,?4 & &     E%  (* * * *
  	] 	] 	]LL6c!ff66LFFFWc!ff-f6[\\\\\\\\\	]s     O6P7 7
R!ARR!R!Nr  r\   rX   rA   r  r    s6        )*e] e] e] e] e]rX   r  c                       e Zd ZegZd ZdS )BuyerReferralCodeGeneratec                    t           j                            dd          }t                              d|            	 g }|D ]u}t                      |_        |                                 t                              d|j         d|j                    |	                    |j        |j        d           vt          d|dt          j        	          S # t          $ r`}t                              d
t          |           d           t          dt          |          it          j        	          cY d }~S d }~ww xY w)NT)r   referral_code__isnullzbuyers IDs: zProcessing buyer ID: z and their referral code : )buyer_idcodez)Buyer referral code generate successfullyr   rH   rq  rr  r   )rs   rh   rt   r   r   generate_unique_referral_codereferral_coder   r   r}  r
   r   r|   r=   r   ra   r   )rS   r>   buyersr   buyerr@   s         rA   rQ   zBuyerReferralCodeGenerate.post^  sr   $$d$$OO+6++,,,	]M 
 
&C&E&E#

nEHnnY^Ylnnooo$$ %!/& &     B%  (* * * *
  	] 	] 	]LL6c!ff66LFFFWc!ff-f6[\\\\\\\\\	]s     BC 
E"AD=7E=ENr  r\   rX   rA   r  r  [  s1        )*] ] ] ] ]rX   r  c                   T    e Zd Zej                            d          ZeZd Z	d Z
dS )BuyerRegisterViewSetTr   c                    |                      |j                  }|                    d           |j                            d          }t                      }|                                }||_        d|_        |                                 d|z   }d|||d}	t          |	           t          d	d
it          j                  S )NrK   Tr   r   Fr   r   r   r   r   rH   )r   rL   r   r   r<   r   r   r   r   r   r
   r   r|   )
rS   r>   rT   rU   r~   r   r   r  r   rL   s
             rA   r   zBuyerRegisterViewSet.create  s    (((==
d333)--g66nn!!	  

 C 7	
 
 	t67v?QRRRRrX   c                 h   |                                  }|                     ||j        d          }|                    d           |                                 |j        }|                    dd           }d|j        d}|rt          |          }	|	|d<   t          |t          j
                  S )	NTr   r   is_loginzUser data updated successfullyr   rF   rH   )r   r   rL   r   r   r#  r<   rd   r
   r   r|   )
rS   r>   rT   rU   r   r~   r#  r  r   rF   s
             rA   r  z#BuyerRegisterViewSet.partial_update  s    ??$$((d(SS
D111+##J55 4O
 

  	+'11E%*M'"f.@AAAArX   N)rY   rZ   r[   rs   rh   rt   rj   BuyerRegisterSerrl   r   r  r\   rX   rA   r  r    sX        |""D"11H'S S S:B B B B BrX   r  c                   "    e Zd ZegZeZeZd Z	dS )BuyerListingc                    |j         j        r|j         j        st          ddit          j                  S |j                            d          }|j                            d          }|j                            d          }t          j	        
                    d          }|rE|
                    t          |	          t          |
          z  t          |          z            }|r|rt          j        d          }|                    t          j        t          j        |d                                          t&          j                            }	|                    t          j        t          j        |d                                          t&          j                            }
|	                    t          j                  }|
                    t          j                  }|
                    ||f          }|                                 }|                    |||           }|                     |d||j         d          }|                    |j                  S )Nr   r  rH   r  r   r   Tr  r  r  r  r  r  r  r  r  r   )rc   r   r   r
   r   r"  r#  r<   rs   rh   rt   r)   r$  r%  r&  r2   r'  r(  r   r3   r)  r*  
astimezoneutcr,  r-  rl   r.  rL   )rS   r>   rT   rU   r  r   r   rj   r/  start_local	end_local	start_utcend_utcr2  paginated_buyerr~   s                   rA   r   zBuyerListing.list  sA   |( 	0I 	@A0   
 %))(33)--l;;
'++J77<&&&55 	v...6***+6***+ H  	O( 	O 566B ++h&6x7HU_7`7`7e7e7g7gimiq&r&rssKH$4X5FxQ[5\5\5a5a5c5ceiem$n$nooI $..tx88I**4844G  )W9MNNH))++	#55hd5SS** '>> + 
 

 //
@@@rX   N)
rY   rZ   r[   r#   rm   r  rl   r(   r,  r   r\   rX   rA   r  r    s=        )*''7A 7A 7A 7A 7ArX   r  c                   J    e Zd Zej                                        ZeZd Z	dS )BuyerOTPVerifyViewSetc                    	 |                      |j                  }|                    d           |j                            d          }|j                            d          }t
          j                            |                                          }|s:t          
                    d|            t          dd	it          j        
          S |j        |k    r:t          
                    d|            t          ddit          j        
          S d|_        d|_        d|_        |                                 t          
                    d|            t)          |          }t          d|j        dt          j        
          S # t*          $ r_}	t          
                    dt-          |	                      t          dt-          |	          dt          j        
          cY d }	~	S d }	~	ww xY w)NrK   Tr   r   r   r   z&[OTP Log] - No user found with email: r   User not foundrH   z+[OTP Log] - Invalid OTP entered for email: r7  z0[OTP Log] - OTP verified successfully for user: OTP verified Successfullyr   z![OTP Log] - Error verifying OTP: -Something went wrong. Please try again later.r   r   )r   rL   r   r   r<   rs   rh   rt   r   r   r   r
   r   r   r   r|   r   r   rH  r   r   r=   ra   r   )
rS   r>   rT   rU   r~   r   r   
buyer_user	buyer_serr@   s
             rA   r   zBuyerOTPVerifyViewSet.create  s
   j	,,',,??J555-11'::E+//66C,,5,99??AAJ ]LULLMMM(8 9&B[\\\\~$$Q%QQRRR 6v?QRRRR&*J##'J "&JOOKKR5RRSSSX .j99I$?XXagastttt 	 	 	KKDCFFDDEEEGRUVWRXRXYY<        	s-   CF AF A7F 
G;AG60G;6G;N)
rY   rZ   r[   rs   rh   ri   rj   BuyerRegisterOTPVerifySerrl   r   r\   rX   rA   r  r    sA        |!!H0l l l l lrX   r  c                   J    e Zd Zej                                        ZeZd Z	dS ) BuyerPasswordResetRequestViewSetc                    |                      |j                  }|                    d           |j                            d          }t
          j                            |                                          }|d k    rt          ddit          j                  S t                      }||_        |                                 d	|z   }d
|||d}	t          |	           t          ddit          j                  S )NrK   Tr   r   r   r   r   rH   r   z&e360 Mart OTP for buyer password resetr   zOTP sent to registered email.r   )
rS   r>   rT   rU   r~   r   r  r   r   rL   s
             rA   r   z'BuyerPasswordResetRequestViewSet.create  s	   **',*??
D111)--g66\(((77==??
U#JKV\Vopppp nn 
 C ?	
 
 	t?AFL^____rX   NrS  r\   rX   rA   r  r    sA        |!!H4` ` ` ` `rX   r  c                       e Zd ZeZd ZdS )"BuyerPasswordResetOTPVerifyViewSetc                    |                      |j                  }|                    d           |j                            d          }t          |j                            d                    }t          j                            |          }|j        }||k    r8d|_	        |
                                 t          ddit          j        	          S t          dd
it          j        	          S )NrK   Tr   r   r   r   r   r  rH   rX  rY  )	rS   r>   rT   rU   r~   r   r   r  r9  s	            rA   r   z)BuyerPasswordResetOTPVerifyViewSet.create  s    **',*??
D111)--g66*+//6677\%%e%44
^
 '+J#OOU#?@6K]^^^^U?3f>YZZZZrX   N)rY   rZ   r[   BuyerPasswordResetOTPVerifySerrl   r   r\   rX   rA   r  r    s.        5[ [ [ [ [rX   r  c                   J    e Zd Zej                                        ZeZd Z	dS )BuyerPasswordResetViewSetc                    |                      |j                  }|                    d           |j                            d          }|j                            d          }t
          j                            |                                          }|j	        dk    rt          dd	it          j        
          S |                    |           |                                 t          dd| it          j        
          S )NrK   Tr   r   r   r   Fr   r7  rH   r   z1Password Change for Buyer Successfully for email r^  )rS   r>   rT   rU   r~   r   r   r  s           rA   r   z BuyerPasswordResetViewSet.create  s    **',*??
D111)--g66,00<<\(((77==??
"e++W]36;VWWWW)))ZSXZZ[cicuvvvvrX   N)
rY   rZ   r[   rs   rh   ri   rj   BuyerPasswordResetSerrl   r   r\   rX   rA   r  r    sA        |!!H,w w w w wrX   r  c                   Z     e Zd Zej                                        ZeZ fdZ	d Z
 xZS )BuyerLoginViewSetc                 \    t                                                      }| j        |d<   |S r>  r?  rB  s     rA   rA  z(BuyerLoginViewSet.get_serializer_context  rD  rX   c                 l   	 |                      |j                  }|                    d           |j                            d          }|j                            d          }t          d           t          d|            t          j                            |          	                                }t          d	|           |,t          d
           t          ddit          j                  S |j        r,t          d           t          ddit          j                  S |j        r,t          d           t          ddit          j                  S t!          ||j                  s,t          d           t          ddit          j                  S |j        s-t          d           t          dddt          j                  S |j        s,t          d           t          ddit          j                  S t+          |          }t-          |          }	t          d           t          d||	j        dt          j                  S # t0          $ rR}
t          dt3          |
                     t          dt3          |
          dt          j                  cY d }
~
S d }
~
ww xY w) NrK   Tr   r   r   z.--------- Request received for login ---------zEmail: r   z------ Retrieved User ------zUser not found with this email.r   r   rH   z'Attempted login with superuser account.zpAdmin accounts cannot log in as buyer. Please use a different email that isn't associated with an admin account.zrVendor accounts cannot log in as buyer. Please use a different email that isn't associated with an vendor account.zIncorrect password provided.r   zOTP is not verified.FzOTP is not verified!)r   r   zBuyer account is deactivated.r   zBuyer account is deactivezLogin successful.r   r   z*An unexpected error occurred during login:z"Something went wrong during login.r  )rl   rL   r   r   r<   r   rs   rh   rt   r   r
   r   r   r   r"  rr   r   r   rO   r   r   rd   r  r|   r=   ra   r   )rS   r>   rT   rU   r~   r   r   r  rF   r  r@   s              rA   r   zBuyerLoginViewSet.create  s   8	..GL.AAJ555-11'::E!044Z@@HBCCC#E##$$$,,5,99??AAJ0*===!7888(O PY_Yrssss& 5?@@@  N! 35 5 5 5 # 5?@@@  P! 35 5 5 5 "(J,?@@ c4555(< =fFabbbb* |,---?U V V_e_z{{{{' l5666*E FvOjkkkk (
33E(44I%&&&$6PYP^__hnhz{{{{ 	 	 	>AGGG<s1vvNN<        	sE   C5I 82I +2I A I 3I 2I AI 
J3!AJ.(J3.J3)rY   rZ   r[   rs   rh   ri   rj   BuyerLoginSerrl   rA  r   rN  rO  s   @rA   r  r    s`        |!!H$    
9 9 9 9 9 9 9rX   r  c                       e Zd Zej                            d          ZeZ e	            d             Z
 e	            d             ZdS )VendorProfileTrq   c                     |                                                      d          }|                     |d          }t          d|j        dt
          j                  S )Nrw   Trx   z$Vendor profiles fetched successfullyr   rH   r   r}   s         rA   r   zVendorProfile.listE  s_    $$&&//66
 (((==
 FPZP_``ioi{||||rX   c                 6   |j         j        }t          j                            |d                                          }|d k    rt          ddit          j                  S | 	                    |          }t          d|j
        dt          j                  S )NTr   rr   r   User not existrH   #vendor profile fetched successfullyr   )rc   r   rs   rh   rt   r   r
   r   r   r   rL   r|   )rS   r>   rT   rU   rn  r_  r~   s          rA   retrievezVendorProfile.retrieveP  s    LO	\((id(KKQQSS
W%56f>WXXXX((44
DJO\\gmgyzzzzrX   N)rY   rZ   r[   rs   rh   rt   rj   r{   rl   r!   r   r  r\   rX   rA   r  r  @  s        |""T"22H' ^} } } ^
{ 
{ 
{ 
{ 
{rX   r  c                       e Zd Zej                            d          ZeZ e	            d             Z
 e	            dd            ZdS )BuyerProfileTr  c                     |                                                      d                              d          }|                     |d          }t	          d|j        dt          j                  S )NTr  rw   rx   z#buyer profiles fetched successfullyr   rH   )ru   rt   rz   r   r
   rL   r   r|   r}   s         rA   r   zBuyerProfile.lista  sn    $$&&--t-<<EEeLL
 (((==
 Ez__hnhz{{{{rX   Nc                 L   |j         }|j                                        }g }|D ]J}	 |j        }|                    t          |d|i          j                   6# t          j        $ r Y Gw xY wt          |d|i          }t          |j        |dt          j                  S )Nr>   rF  )rL   favourite_productsrH   )rc   user_favourite_productsri   productr}  r   rL   r   r  r  r
   r   r|   )	rS   r>   pkuser_instancefav_productproduct_datafavr  r~   s	            rA   r  zBuyerProfile.retrievej  s       $;??AA  	 	C+##OGiQXEY$Z$Z$Z$_````'    &mi=QRRR

\RR]c]opppps   2AA-,A-N)rY   rZ   r[   rs   rh   rt   rj   r  rl   r!   r   r  r\   rX   rA   r  r  ]  s        |""D"11H'^| | | ^q q q q q qrX   r  c                        e Zd Zej                                        ZeZ fdZ	 e
            d             Z e
            d             Z xZS )UserRetrieveViewSetc                 h    | j         dk    rt          S t                                                      S )Nr   )r   UserCreateSerializerr@  get_serializer_class)rS   rC  s    rA   r  z(UserRetrieveViewSet.get_serializer_class  s,    ;(""''ww++---rX   c                     |                                                      d          }|                     |d          }t          d|j        dt
          j                  S )Nrw   Trx   zusers fetch successfullyr   rH   r   r}   s         rA   r   zUserRetrieveViewSet.list  sl    $$&&//66
 (((==
-O
 
 $& & & 	&rX   c                    |                                  }|j                                        }|j                            dd          }g }|D ]9}	 |j        }	|                    |	j                   %# t          j        $ r Y 6w xY w| 	                    |          }
t          d|
j        |dt          j                  S )Nproduct__idTri  zuser fetch successfully)r   rL   r  rH   )r   r  ri   rv  r  r}  r   r   r  r   r
   rL   r   r|   )rS   r>   rT   rU   r   r  fav_product_idsr  r  r  r~   s              rA   r  zUserRetrieveViewSet.retrieve  s    ??$$6::<<":FF}[_F`` 	 	C+##GJ////'    ((22
,O!0
 
 $	& & & 	&s   !A33BB)rY   rZ   r[   rs   rh   ri   rj   r   rl   r  r!   r   r  rN  rO  s   @rA   r  r    s        |!!H,. . . . . ^
& 
& 
& ^& & & & & & &rX   r  c                   D    e Zd Zej                                        ZeZdS )PermissonsRetrieveViewSetN)	rY   rZ   r[   r$   rh   ri   rj   PermissionSerializerrl   r\   rX   rA   r  r    s*        !%%''H+rX   r  c                      e Zd Zej                                        ZeZ e	            d             Z
 eddg           e	            d                         Z eddg           e	            d                         ZdS )UserViewSetc                     |                                  }|                     |d          }t          |j                  S )NTrx   )ru   r   r
   rL   r}   s         rA   r   zUserViewSet.list  s?     $$&&
 (((==

(((rX   Fr<   )r   methodsc                     t           j                            d          }|                     |          }|                     |d          }t          |j                  S )NTr  rx   )rs   rh   rt   r-  r   r
   rL   )rS   r>   r  pager~   s        rA   list_buyerszUserViewSet.list_buyers  sY     $$d$33%%f-- ((d(;;

(((rX   c                   	 |j                             d          }|st          ddit          j                  S 	 t
          j                            t          |          d          }nZ# t          $ r  t          ddit          j                  cY S t
          j	        $ r  t          ddit          j
                  cY S w xY w|j        |j        f	t
          j                            d	          }	fd
|D             }d |D             }t          j                            |          }t          |d          j        }t          |t          j                  S )Nr  r   z'Buyer ID is required as query parameterrH   T)r  r   zBuyer ID must be an integerzBuyer not foundrq   c                 ^    g | ])}t          |j        |j        f          j        d k    '|*S )r9   )r   r   r   km).0r   buyer_locations     rA   
<listcomp>z7UserViewSet.nearby_vendors_by_buyer.<locals>.<listcomp>  sD     
 
 
V[(ABBEKK KKKrX   c                     g | ]	}|j         
S r\   r   )r   r   s     rA   r  z7UserViewSet.nearby_vendors_by_buyer.<locals>.<listcomp>  s    DDD6VYDDDrX   )user_id__inrx   )r#  r<   r
   r   rO   rs   rh   r   r   r  r   r   r   rt   r   r   rL   r|   )
rS   r>   r  r  vendorsnearby_vendorsnearby_vendor_idsnearby_vendor_productsserialized_productsr  s
            @rA   nearby_vendors_by_buyerz#UserViewSet.nearby_vendors_by_buyer  s    '++J77 	vW&OPY_Ytuuuu	\L$$H$EEEE 	j 	j 	jW&CDVMhiiiiii  	\ 	\ 	\W&78AZ[[[[[[	\  )UZ0,%%%55
 
 
 
!(
 
 

 ED^DDD!(!7!7DU!7!V!V()?dKKKP+F4FGGGGs   .A+ +'C+CCN)rY   rZ   r[   rs   rh   ri   rj   r{   rl   r!   r   r   r  r
  r\   rX   rA   r  r    s        |!!H'^) ) ) V55'***^) )  +*) V55'***^H H  +*H H HrX   r  c                   J    e Zd Zej                                        ZeZd Z	dS )ResendOTPRequestViewSetc                    |                      |j                  }|                    d           |j                            d          }	 t
          j                            |                                          }t                      }||_
        |                                 d| }d|||d}	t          |	           t          d	d
it          j                  S # t           $ r  t          ddit          j                  cY S t$          $ r4}
t          dt'          |
          it          j                  cY d }
~
S d }
~
ww xY w)NrK   Tr   r   r   zYour OTP is: ze360 Mart OTP for verificationr   r   zOTP resend successfully rH   r   z$User with this email does not exist.)rl   rL   r   r   r<   rs   rh   rt   r   r   r   r   r   r
   r   r|   r   r   r=   ra   r   )rS   r>   rT   rU   r~   r   rc   r   r   rL   r@   s              rA   r   zResendOTPRequestViewSet.create  sp   ***==
D111)--g66	]<&&u&55;;==D ..CDHIIKKK )3((D <!	 D 4   U$>?HZ[[[[! 	q 	q 	qW&LMV\Vopppppp 	] 	] 	]Wc!ff-f6[\\\\\\\\\	]s%   BC   'E		E)E;EENrS  r\   rX   rA   r  r    sA        |!!H4] ] ] ] ]rX   r  c                       e Zd ZeZd ZdS )ChangePasswordViewSetc                    |                      |j                  }|                    d           |j                            d          }|j                            d          }|j                            d          }|j                            d          }t
          j                            |                                          }	t          ||	j
                  st          d	d
it          j                  S ||k    rt          d	dit          j                  S |	                    |           |	                                 t          d	dit          j                  S )NrK   Tr   r   old_passwordr   r   r   r   z<The old password you entered is incorrect. Please try again.rH   z>Password and ConfirmPassword should be same. Please try again.zPassword Changed Successfully)rl   rL   r   r   r<   rs   rh   rt   r   r   r   r
   r   rO   r   r   r|   )
rS   r>   rT   rU   r~   r   r  r   r   rc   s
             rA   r   zChangePasswordViewSet.create  sh   **',*??
D111)--g66!044^DD,00<<%4889KLL|""5"117799l4=99 	gU#abjp  kF  G  G  G  G)))'g hpv  qL  M  M  M  M!!(+++		'G HSYSeffffrX   N)rY   rZ   r[   ChangePasswordSerrl   r   r\   rX   rA   r  r    s.        (g g g g grX   r  c                   l    e Zd Zej                                        ZeZ e	            dd            Z
dS )VendorProductNc                 h   t          t          |d          }|d k    rt          ddit          j                  S |                     |          }t          j                            |          }t          |dd|i          }|j
        }t          d	|j
        |j
        d
t          j                  S )NTr  r   r  rH   rg  r>   r   r  r   rL   products)r   rs   r
   r   r   r   r   rh   rt   r   rL   r|   )rS   r>   r  r_  r~   r  product_serializerproducts_datas           rA   r  zVendorProduct.retrieve.  s     'tdCCC
W%56f>WXXXX((44
?))z)::'tYwDWXXX*/ DJOhzh  A  A  LR  L^  _  _  _  	_rX   r  )rY   rZ   r[   rs   rh   ri   rj   r{   rl   r!   r  r\   rX   rA   r  r  )  s\        |!!H' ^_ _ _ _ _ _rX   r  c                       e Zd ZddZdS )VendorProductDetailNc                    t           j                            |d                                          }|d k    rt	          ddit
          j                  S t          |d|i          }t          j                            |          }t          |d||j
        d	
          }t	          d|j        |j        dt
          j                  S )NTr  r   r  rH   r>   rF  rg  r  r   r  r  )rs   rh   rt   r   r
   r   r   r{   r   r   rc   rL   r|   )rS   r>   r  r_  r~   r  r  s          rA   r  zVendorProductDetail.retrieveE  s    \((bt(DDJJLL
W%56f>WXXXX%j9g:NOOO
?))z)::'tQXahamEnEnooo;!.3  *, , , 	,rX   r  )rY   rZ   r[   r  r\   rX   rA   r  r  >  s(        , , , , , ,rX   r  c                   V    e Zd Zej                            d          ZegZe	gZ
d ZdS )UserdelViewSetFr   c                    t          |j                  }|                                r|j        d         }|j        j        }||k    rt          ddit          j                  S 	 t          j
                            |          }|j        rt          ddit          j                  S |                                 t          dd	it          j                  S # t          j        $ r  t          dd
it          j                  cY S t"          $ r  t          ddit          j                  cY S w xY wt          |j        t          j                  S )NrK   r   r   z*You are not authorized to delete this userrH   r   z$Superuser accounts cannot be deletedrG   zUser deleted successfullyr  zgThis user cannot be deleted because related records exist in other tables (e.g., orders, transactions).)UserDeletionSerializerrL   r   r   rc   r   r
   r   r"  rs   rh   r<   r   deleter|   r  r   r-   rO   errors)rS   r>   rT   rU   r~   r   
tokenemailrc   s           rA   r   zUserdelViewSet.create_  s~   +>>>
   	7-g6E|)J
""*V W`f`yzzzz7|''e'44$ y#W.T$U^d^wxxxx ,G HQWQcdddd$ _ _ _*: ;FD]^^^^^^! 7 7 7  G! 57 7 7 7 7 77
 
)&2MNNNNs   (AC ,0C ,D4&D43D4N)rY   rZ   r[   rs   rh   rt   rj   r    authentication_classesr#   rm   r   r\   rX   rA   r  r  Z  sR        |"""66H34)*O O O O OrX   r  c                   P    e Zd Zej                                        ZeZdgZ	d Z
dS )RegisterSsoViewSetrQ   c                 6   	 |j                             d          }|s,t          d           t          ddit          j                  S t          j                            |          	                                }|rTt          |          j         }t          |          }t          d|            t          d||d	t          j                  S |j                             d
          }t          j                            |          	                                }	|	r/t          d|            t          ddit          j                  S |j                             d          }
|
rt          j                            d|
          	                                }|r|j        s'|j        s t          dddidt          j                  S |j                                         }|j        |d<   n|j         }t#                      |d<   d|d<   |                     |          }|                                r|                                }t          |          }t+          |          j         }t          j                            |          	                                }t          |          j         }t          d|            t          d||d	t          j                  S d |j                                        D             }t          d|            t          d|dt          j                  S # t2          $ rT}t          dt5          |                      t          dt5          |          d t          j                  cY d }~S d }~ww xY w)!Nsso_idz.[Google Log] - SSO ID not provided in request.r   zSSO ID is requiredrH   )r(  z1[Google Log] - User login successful for SSO ID: r   r   r   r   z&[Google Log] - User Already register: zAYour account already exists. Please login with email and passwordinvited_by_codeT)r   r  Fr  z+Invalid referral code or user not verified.r
  referred_byr   rK   z8[Google Log] - User registered successfully for SSO ID: zUser registered successfullyc                 &    i | ]\  }}||d          S )r   r\   )r   fieldr   s      rA   
<dictcomp>z-RegisterSsoViewSet.create.<locals>.<dictcomp>  s"    XXXleU%qXXXrX   z5[Google Log] - Validation error during registration: zValidation error)r   r"  z4[Google Log] - Unexpected error in user create API: r  r  )rL   r<   r   r
   r   rO   rs   rh   rt   r   r  rd   r|   r(  r   r   r   r  r   r   r   RegisterSerializerr   r"  itemsr=   ra   r   )rS   r>   rT   rU   r(  rc   r   rF   r   
user_checkr)  referral_userrL   r~   r"  r@   s                   rA   r   zRegisterSsoViewSet.create  s   c	\%%h//F FGGG01!6    <&&f&55;;==D P,T227	+D11R&RRSSS.	RR!-     ((11!\00u0==CCEE
 J5JJKKK# cd%:   
 #*,"2"23D"E"E" ($(L$7$7!%&5 %8 % % egg	 " ) 	1E 	mNh 	'+0$35b*"  $*#>       #<,,..D*7*:D''"<D(E(G(G_%'+^$ "00d0;;
 &&(( U%??,,DV 055E 24 8 8 =I<..f.==CCEED 0 6 6 ;I]U[]]^^^# >Xabb%6    YXj>O>U>U>W>WXXXVfVVWWW.&AA!6     	 	 	QQQQRRRGRUVWRXRXYY<        	sB   AL: 
BL: A<L: A>L: DL: 'AL: :
NA	NNNN)rY   rZ   r[   rs   rh   ri   rj   r.  rl   http_method_namesr   r\   rX   rA   r&  r&  {  sI        |!!H)d d d d drX   r&  )django.shortcutsr   rest_frameworkr   r   r   product.viewsr   modelsserializersrest_framework.responser
   utilssendgrid.helpers.mailr   sendgridr   django.confr   django.core.exceptionsr   geopy.distancer   product.serializersr   r   r   product.modelsr   r   r   r   r   r   rest_framework.decoratorsr   rest_framework.paginationr   django.contribr   django.contrib.auth.hashersr   r   r   rest_framework.permissionsr   custom_authenticationr    Help_Support.decoratorsr!   rest_framework_simplejwt.tokensr"   r#   django.contrib.auth.modelsr$   django.contrib.authr%   rest_framework.viewsr&   rest_framework.exceptionsr'   suscription.custom_paginationr(   django.db.modelsr)   r*   django.utils.timezoner+   dateutil.relativedeltar,   	django.dbr-   loggingwallet.modelsr.   vendor_listing.tasksr/   r0   setting.viewsr2   r1   r3   r$  django.httpr4   django.core.cacher5   	getLoggerrY   r   rB   rD   rd   ModelViewSetrf   ro   r   r   r   ViewSetr   r   r  r  r5  r<  rQ  rV  r\  rb  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r\   rX   rA   <module>r[     s
   # # # # # # * * * * * * * * . . . . . . + + + + + +         , , , , , ,     & & & & & & & & & & & &             5 5 5 5 5 5 , , , , , , # # # # # # M M M M M M M M M M m m m m m m m m m m m m m m m m , , , , , , : : : : : : # # # # # # E E E E E E E E - - - - - - - - + + + + + + + + / / / / / / : : : : : : 2 2 2 2 2 2 8 8 8 8 8 8 6 6 6 6 6 6 1 1 1 1 1 1 , , , , , , ( ( ( ( ( ( 5 5 5 5 5 5 : : : : : : ( ( ( ( ( ( ( ( % % % % % % 0 0 0 0 0 0 $ $ $ $ $ $  ' ' ' ' ' ' W W W W W W W W     . . . . . . . . . .  % $ $ $ $ $ # # # # # # 
	8	$	$	+ 	+ 	+b b b b bg b b b(  " " " " "h+ " " ""^ "^ "^ "^ "^("7 "^ "^ "^J2x 2x 2x 2x 2x80 2x 2x 2xj"C "C "C "C "C- "C "C "CH#v #v #v #v #vx'< #v #v #vN[ [ [ [ [ 0 [ [ [FR R R R RH1 R R Rl1
 1
 1
 1
 1
7 1
 1
 1
f9A 9A 9A 9A 9AH$ 9A 9A 9Av)j )j )j )j )jX2 )j )j )jZ7t 7t 7t 7t 7t) 7t 7t 7tv(^ (^ (^ (^ (^(= (^ (^ (^XX X X X X(*: X X X6Z Z Z Z Z!6 Z Z Z0r] r] r] r] r]G r] r] r]lh] h] h] h] h]' h] h] h]V] ] ] ] ] ] ] ]H4B 4B 4B 4B 4B80 4B 4B 4Br<A <A <A <A <A8# <A <A <A~q q q q qH1 q q qR%` %` %` %` %`x'< %` %` %`R[ [ [ [ [)9 [ [ [6w w w w w 5 w w w.C C C C C( C C CJ{ { { { {H) { { {: q  q  q  q  q8(  q  q  qD)& )& )& )& )&(/ )& )& )&X, , , , , 5 , , ,4H 4H 4H 4H 4H(' 4H 4H 4Hl%] %] %] %] %]h3 %] %] %]Ng g g g gH, g g g6_ _ _ _ _H) _ _ _*, , , , ,(* , , ,8O O O O OX* O O OBj j j j j. j j j j jrX   