
    nj֒                        d dl 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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 ddlmZmZmZmZmZ d dl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*Z*d dl+m,Z, ddl-m.Z.m/Z/m0Z0 d dl1m2Z2 d dl3Z3d dl4Z4d dl5Z5d dl6m7Z7 d dl8m9Z9 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@  G d de      ZA G d de      ZB G d d e      ZC G d! d"e      ZD G d# d$e      ZE G d% d&e      ZF G d' d(e      ZGd d)l1mHZH  G d* d+e      ZI G d, d-e      ZJ G d. d/e      ZK G d0 d1e      ZLd2 ZMd3 ZNd4 ZO G d5 d6e      ZPy)7    N)get_object_or_404render)APIViewexception_handler)Responsestatus)Token)send_otp_whatsapp_message)check_pincodeget_pincode_from_latlng)ProductReviewWishlist)send_otp_via_twilio   )UsersOTPAddressUserLocationReferral)Shop)CartCouponsCustomCouponNotificationStatDeletedOrdersOrders)	timedelta)timezone)AccessToken)UserDataSerializerUserProfileSerializerAddressSerializer)IsAuthenticated)settings)	send_mail)reverse)	messaging)credentials)r   )transactionc                       e Zd ZdZd Zy)UserLoginViewz;
    View for user login (also used for registration).
    c                 &   |j                   j                  d      }|r|j                  dd      }t        j                  j                  |d      \  }}|r t        j                  j                  |       t        j                  j                  |      j                          t        j                  dd      }t        j                  j                  ||	       t        j                  ||gd
       t        dd|dt         j"                        S )Nmobile_number  Customer)phone_number	user_typeuser  i'  )r5   otp_code   )args	countdownr   zOTP sent successfully!)r	   messageotpr   )datagetreplacer   objectsget_or_creater   creater   filterdeleterandomrandintr   apply_asyncr   r	   HTTP_200_OK)selfrequestr.   r5   createdr7   s         LC:\Users\Saasvaap\Desktop\Akash\Saasvaap\DEMO\Navya-Bakers\accounts\views.pypostzUserLoginView.post(   s    ((9)11#r:M33&* 4 
g ###.%,,.>>$-x8!--M83LXYZ%=hO%%
 	
    N__name__
__module____qualname____doc__rM    rN   rL   r,   r,   #   s    
rN   r,   c                       e Zd ZdZd Zy)OTPVerificationViewz$
    View for OTP verification.
    c                 F   	 |j                   j                  d      }|j                   j                  d      }|j                   j                  d      }|j                   j                  d      }|r|j                  dd      }t        j                         t        d      z
  }t        j                  j                  |||	      j                  d
      j                         }|st        dddt        j                        S t        t        |      }|j!                          t"        j                  j%                  |      \  }	}
||_        |j)                          t+        j,                  |      }|rt.        j                  j                  |      j!                          t0        j                  j                  |      j!                          t.        j                  j                  |      j3                  |d        t0        j                  j                  |      j3                  |d        t        dd|	j4                  t7        |      dt        j8                        S # t:        $ r2}t        ddt7        |      dt        j                        cY d }~S d }~ww xY w)Nr.   r   anonymous_id	fcm_tokenr/   r0   r   )minutes)user__phone_numberr7   created_at__gtez-created_atr   zInvalid or expired OTP.r	   r;   r   )r2   r4   rX   )r5   rX   zOTP verified successfully!)r	   r;   
auth_token	jwt_tokenzAn unexpected error occurred.r	   r;   error)r=   r>   r?   r   nowr   r   r@   rC   order_byfirstr   r	   HTTP_400_BAD_REQUESTr   r   rD   r
   rA   rY   saver    for_userr   r   updatekeystrrH   	Exception)rI   rJ   r.   r7   rX   rY   one_minute_agor<   r5   token_access_tokenes                rL   rM   zOTPVerificationView.post?   sA   L	#LL,,_=M||''.H"<<++N;L((5I - 5 5c2 > &\\^i.BBN ""'4%$2 # 
 -(  "##< "66  %UGD JJL }}222=HE1&DNIIK '//5L ###.557$$+++6==?##!- $ &d&6$$++!- , &d&6;"'))!$\!2	 ))   	> V
 22 	s%   C?I% E"I% %	J .'JJ J NrO   rT   rN   rL   rV   rV   ;   s    MrN   rV   c                       e Zd ZegZd Zy)GetReferralCodeViewc                     	 |j                   j                  }t        d|j                  d      S # t        j
                  $ r t        dddd      cY S w xY w)Nr   )r	   referral_coder   zReferral code not found.r]     r   )r5   referralr   ru   r   DoesNotExist)rI   rJ   rw   s      rL   r>   zGetReferralCodeView.get   sh    
	||,,H!)!7!7   $$ 	5  	s   -0 #AAN)rP   rQ   rR   r$   permission_classesr>   rT   rN   rL   rs   rs      s    )*rN   rs   c                   "    e Zd ZdZegZd Zd Zy)UserProfileViewz5
    View for getting and updating user profile.
    c                     |j                   }t        |      }t        dd|j                  dt        j
                        S )Nr   z$User profile retrieved successfully.r	   r;   r=   r   )r5   r"   r   r=   r	   rH   rI   rJ   r5   
serializers       rL   r>   zUserProfileView.get   s?    ||*40
A"
 %%
 	
rN   c                    |j                   }|j                  }t        ||j                  d      }|j	                         ri|j
                  j                  d|      }||k7  rd|j
                  d<   |j                          t        dd|j                  dt        j                  	      S t        d
d|j                  dt        j                  	      S )NTr=   partialemailFemail_verifiedr   z"User profile updated successfully.r}   r   r   zProfile update failed.r	   r;   errors)r5   r   r"   r=   is_validvalidated_datar>   rg   r   r	   rH   r   rf   )rI   rJ   r5   	old_emailr   	new_emails         rL   putzUserProfileView.put   s    ||JJ	*4gllDQ
 "1155gyII I%>C
))*:;OOC&OO
 ))  3$++
 ..
 	
rN   N)rP   rQ   rR   rS   r$   ry   r>   r   rT   rN   rL   r{   r{      s     **


rN   r{   c                       e Zd ZegZd Zy)UserDataViewc                 .   |j                   }t        ||j                  d      }|j                         r9|j	                          t        dd|j                  dt        j                        S t        dd|j                  d	t        j                        S )
zUpdate logged-in user dataTr   r   zUser data updated successfully.r}   r   r   zValidation error.r   )
r5   r!   r=   r   rg   r   r	   rH   r   rf   r~   s       rL   rM   zUserDataView.post   s    ||'7<<N
 OO@&OO
 ))  .$++
 ..
 	
rN   N)rP   rQ   rR   r$   ry   rM   rT   rN   rL   r   r      s    )*
rN   r   c                       e Zd ZdZegZd Zy)SendVerificationEmailViewz*
    View to send verification email.
    c                 <   |j                   }|j                  j                  dd       }|j                  r|r||j                  k7  rt        j
                  j                  |      j                  |j                        j                         }|rt        dddt        j                        S ||_        d|_        |j                          n_|s]t        dd	dt        j                        S |r||_        d|_        |j                          nt        dd	dt        j                        S |j                  rt        dd
dt        j                        S t        j                   t#        |j                        t%        j&                         t)        d      z   dt*        j,                  d      }t/        t*        dd      }| t1        d|g       }t3        dd| t*        j4                  |j                  gd      }t        dddt        j6                        S )Nr   )r   uuidr   zEmail already exists.r]   r   FzEmail is required.zEmail already verified.   )hours)user_idexpHS256)	algorithmDOMAINzhttp://localhost/zverify-email)r9   zVerify your emailz%Click the link to verify your email: )fail_silentlyr   zVerification email sent.)r5   r=   r>   r   r   r@   rC   excluder   existsr   r	   rf   r   rg   jwtencoderk   r   rc   r   r%   
SECRET_KEYgetattrr'   r&   EMAIL_HOST_USERrH   )	rI   rJ   r5   r   email_existsrn   domainverification_linkaas	            rL   rM   zSendVerificationEmailView.post   s   ||  .::$**,$}}33%3@HHdiiHX__a##$1HI%::  #
&+#		 -AB!66 
 !&DJ*/D'IIK##$1EF%::  )BC22  

DIIx||~	PR@S/ST
 8-@A%hw~UG'L&MN 34E3FG$$ZZL
 %?@%%
 	
rN   N)rP   rQ   rR   rS   r$   ry   rM   rT   rN   rL   r   r      s     **?
rN   r   c                       e Zd Zd Zy)VerifyEmailViewc                    	 t        j                  |t        j                  dg      }	 t	        t
        |d         }d	|_        |j                          t        |dd
dd      S #  t        |dddd      cY S xY w# t         j                  $ r t        |dddd      cY S t         j                  $ r t        |dddd      cY S w xY w)Nr   )
algorithmsr   r   zemail_verification.htmlr   zVerification link has expired.r]   Tr   zEmail verified successfully.zInvalid verification link.)r   decoder%   r   r   r   r   r   rg   ExpiredSignatureErrorInvalidTokenError)rI   rJ   rn   payloadr5   s        rL   r>   zVerifyEmailView.get9  s     	jj(;(;	RG(WY5GH #'DIIK))GH - -MN   (( 	))IJ 
 $$ 	))EF 	s3   'A< A% &A< %A97A< 9A< <#C!"CCN)rP   rQ   rR   r>   rT   rN   rL   r   r   8  s    !rN   r   )AllowAnyc                   6    e Zd ZdZegZd ZddZd Zd Z	d Z
y)	AddressDetailViewzIView for retrieving, creating, updating, and deleting a specific address.c                 b    t         j                  j                  |      j                  |      S )Nr4   )pk)r   r@   rC   r>   )rI   r5   r   s      rL   
get_objectzAddressDetailView.get_objectc  s(    %%4%0444;;rN   Nc                 f   |`t         j                  j                  |j                        }t	        |d      }t        dd|j                  dt        j                        S | j                  |j                  |      }t	        |      }t        dd|j                  dt        j                        S )	Nr4   T)manyr   z!Addresses retrieved successfully!r}   r   zAddress retrieved successfully!)
r   r@   rC   r5   r#   r   r=   r	   rH   r   )rI   rJ   r   r9   kwargs	addressesr   addresss           rL   r>   zAddressDetailView.getf  s    :..GLL.AI*94@JB&OO
 ))  oogllB7G*73J@&OO
 )) rN   c                    |j                   j                  s|j                  j                  d      |j                  j                  d      |j                  j                  d      |j                  j                  d      |j                  j                  d      d|j                  d<   t        dd	|j                  d   d
t        j                        S t        |j                        }|j                         rN|j                  |j                         }t        ddt        |      j                  d
t        j                        S t        dd|j                  dt        j                        S )Nlatitude	longitudeflat_nolandmarkaddress_type)r   r   r   r   r   guest_addressr   z(Address saved for guest user (temporary)r}   r   )r=   r4   zAddress created successfully!r   zAddress creation failed.r   )r5   is_authenticatedr=   r>   sessionr   r	   rH   r#   r   rg   HTTP_201_CREATEDr   rf   )rI   rJ   r9   r   r   r   s         rL   rM   zAddressDetailView.post~  s9   ||,,#LL,,Z8$\\--k:"<<++I6#LL,,Z8 ' 0 0 @0GOOO, I#OOO<
 ))  'GLL9
  oo7<<o8G>-g6;;
 ..  5$++
 ..
 	
rN   c                 N   | j                  |j                  |      }t        ||j                  d      }|j	                         r9|j                          t        dd|j                  dt        j                        S t        dd|j                  d	t        j                        S )
NTr   r   zAddress updated successfully!r}   r   r   zAddress update failed.r   )r   r5   r#   r=   r   rg   r   r	   rH   r   rf   )rI   rJ   r   r9   r   r   r   s          rL   r   zAddressDetailView.put  s    //',,3&wW\\4P
 OO>&OO
 ))  3$++
 ..
 	
rN   c                     | j                  |j                  |      }|j                          t        dddt        j
                        S )Nr   zAddress deleted successfully!r]   r   )r   r5   rD   r   r	   rH   )rI   rJ   r   r9   r   r   s         rL   rD   zAddressDetailView.delete  s?    //',,3%DE%%
 	
rN   )N)rP   rQ   rR   rS   r   ry   r   r>   rM   r   rD   rT   rN   rL   r   r   ^  s'    S"<0'
R
,
rN   r   c                       e Zd Zd Zy)SaveUserLocationViewc                    |j                   j                  d      }|j                   j                  d      }|j                   j                  d      }|r|st        dddd      S |j                  j                  r|j                  }d }n3d }|j                   j                  d	      xs t        j                         }t        |      t        |      f}t        j                  t        j                  
      }	 |j                  |      }	d}d}d}d}d}|	rf|	D ]a  }|j                  dg       D ]F  }|j                  dg       }d|v r|d   }d|v sd|v r|d   }d|v r|d   }d|v r|d   }d|v sB|d   }H |sa n dj#                  t%        d ||||g            }t&        j(                  j%                  dd      }g }g }|D ]  }	 |j*                  |j,                  f}|j/                  ||d      }|d   d   d   d   }|j                  d      d k7  r1|j1                  |j2                  d!|j                  d       d"       |d#   d$   }||j4                  d%z  k  r|j1                  ||d%z  f        |j7                  d( 
       |r|d   d   nd }|r|d   d)   nd }|rP	 t8        j(                  j                  ||*      }t:        j(                  j=                  |d |d+|||||d,-      \  }}n5t:        j(                  j=                  |r|nd |s|nd |||dd ||d0-      \  }}t        d)d1|j*                  |j,                  |j@                  r|j@                  j
                  nd ||jB                  |jD                  r|jD                  jF                  nd |jH                  d2|d3d4      S # t        $ r7}
t        ddt        |
      t        j                          dd      cY d }
~
S d }
~
ww xY w# t        $ rF}
|j1                  |j2                  d&t        |
      t        j                          d'       Y d }
~
zd }
~
ww xY w# t8        j>                  $ r t        dd.dd/      cY S w xY w)5Nr   r   
address_idr   z$Latitude and longitude are required.r]     r   rX   )rj   zReverse geocoding failed.)r	   r;   rb   	tracebacki  r0   address_componentstypesroute	long_namesublocality_level_1sublocalitylocalityadministrative_area_level_1countryz, F)latitude__isnulllongitude__isnulldriving)originsdestinationsmoderowselementsr	   OKzNon-OK status: )shop_idreasondistancevaluer6   zException occurred)r   r   rb   r   c                     | d   S )Nr   rT   )xs    rL   <lambda>z+SaveUserLocationView.post.<locals>.<lambda>7  s    QqTrN   r   )idr5   T)r   is_selected_addressr   r   shoplocation_addressr   )r5   rX   defaultszAddress not found.rv   )r   r   r   r   r   r   r   z-Location and nearest shop saved successfully.)r   r   r   rX   r   r   r   )r	   r;   locationshop_errors   )%r=   r>   r   r5   r   r   uuid4float
googlemapsClientr%   GOOGLE_MAPS_API_KEYreverse_geocoderl   rk   r   
format_excjoinrC   r   r@   r   r   distance_matrixappend	unit_namedelivery_radiussortr   r   update_or_createrx   r   r   r   r   r   ) rI   rJ   r   r   r   r5   rX   user_locationgmapsreverse_geocode_resultrq   street_name	area_name	city_name
state_namecountry_nameresult	componentr   r   shops	distancesr   r   shop_locationelementroad_distancenearest_shopnearest_distancer   r   rK   s                                    rL   rM   zSaveUserLocationView.post  s   <<##J/LL$$[1	\\%%l3
y)OP  <<((<<DLD"<<++N;Ktzz|Lx%	*:;!!h&B&BC
	%*%:%:=%I" 		
!0!',@"!EI%MM'26E%'&/&<,5%9O$-k$:	!U*$-k$:	4=%.{%;
 E)'0'=! "F& + 1.  994)Y
LIJ
 ##Ue#T	D!% ?..)!." /  !.+J7:;;x(D0&&#'>>$3GKK4I3J"K(   '
 3G < D$8$84$??$$dMD,@%AB+ > 	>**3y|A.79Q<?T
 !//--$-G$0$8$8$I$I!%#*/3$,%. ,,<$4 %J %!'& !- 4 4 E E!Tt15\4 (!*(+0#(8 0 !F !Hg" J ( 1 1!)!3!32:--HMM..T$0+3+G+G9A9I9I("2"2"5"5t(0(A(A  + 
 	
C  		: V!*!5!5!7	  		V  ""#~~2 V!*!5!5!7	$  > ''  -AB sP   9N/ A>O20O2%AQ /	O/8,O*$O/*O/2	Q;;P<<Q#Q*)Q*NrP   rQ   rR   rM   rT   rN   rL   r   r     s    n
rN   r   c                       e Zd Zd Zy)AccountDeletec                    |j                   j                  st        dddt        j                        S |j                   }t
        j                  j                  |g d      j                         rt        dddt        j                        S 	 t        j                         5  t
        j                  j                  |      }|j                         r|D ]  }t        j                  j                  |j                  |j                  |j                   |j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |j0                  |j2                  	        t4        j                  j                  |
      }|j                         r|j7                          t8        j                  j                  |
      }|j                         r|j7                          t:        j                  j                  |      }|j                         r"|D ]  }|j<                  j?                  |        t@        j                  j                  |
      }	|	j                         r|	j7                          tB        j                  j                  |
      }
|
j                         r|
j7                          tD        j                  j                  |
      }|j                         r|j7                          tF        j                  j                  |
      }|j                         r|j7                          tH        j                  j                  |
      }|j                         r|j7                          d|_%        d|_&        d |_'        d |_(        d |_)        d |_*        d |_+        d|_,        d|_-        d|_        |j]                          d d d        t        dddt        j                        S # 1 sw Y   'xY w# t^        $ r2}t        ddta        |      dt        jb                        cY d }~S d }~ww xY w)Nr   zUser Not Authenticatedr]   r   )zBill Created	ConfirmedViewedzOrder PackedzDelivery Assigned
Despatched)	user_uuidorder_status__inz)Cannot delete account with active orders.)r  )order_ID
order_typegrand_totalorder_status
store_uuidpu_uuidcustom_productorder_assigntimeorder_delivered_timecreated_datedescriptionr;   r4   )
CouponUsed	Anonymousr0   Finactiver   zAccount deleted successfullyz2Something went wrong, please contact administratorra   )2r5   r   r   r	   HTTP_403_FORBIDDENr   r@   rC   r   rH   r*   atomicr   rB   r  r  r  r  r  r  r  r  r  r  r  r;   r   rD   r   r   r   remover   r   r   r   r   
first_name	last_namer   r2   genderdobrY   opt_inuser_verify_statusrg   rl   rk   rf   )rI   rJ   r5   ordersordercart_qswishlist_qscouponscoupon
address_qslocation_qsotp_qsreferral_qscustom_coupon_qsrq   s                  rL   rM   zAccountDelete.postx  s   ||,,)AB00 
 ||>>  4  C[   \  c  c  e)TU)) 
m	##%
  ...>==?!'%--44%*^^','7'7(-(9(9).););','7'7$)MM+0+?+?-2-C-C161K1K).););(-(9(9$)MM 5  "($ ,,--4-8>>#NN$
 '..5545@%%'&&(
 "//00D0A>>#")))006 #* %__333>
$$&%%'
 +2299t9D%%'&&(
 +++6==?MMO
 '..5545@%%'&&(
 $0#7#7#>#>D#>#I #**,$++-
 #.!#!
$(!"!%#*/'(		{ &~ )GH))  &%H  	S V
 22 	s7   P %MP(%P PP 	Q#'Q
QQNr  rT   rN   rL   r  r  w  s    |rN   r  c                       e Zd Zd Zy)FetchUserLocationViewc           	         |j                   j                  d      }d}d}|j                  j                  rS|j                  }	 t        j
                  j                  |      }|j                  d}n|j                  j                  }nX|st        dd
dd	      S 	 t        j
                  j                  |      }|j                  d}n|j                  j                  }|r+t        |j                  |j                        }t        |      }|j                  |j                  |j                  r|j                  j                  nd |j                  |j                  r|j                  j                   nd |j                  rI|j                  r|j                  j"                  nd |j                  r|j                  j$                  nd dnd |j&                  |d}	|j                  j                  s||	d<   t        dd|	|dd	      S # t        j                  $ r t        dddd	      cY S w xY w# t        j                  $ r t        dddd	      cY S w xY w)NrX   FTr4   r   z!Location not found for this user.r]   rv   r   zAnonymous ID is required.r   r^   z&Location not found for anonymous user.)r   r   )r   r   r   r   r   r   r   long_distancer   zLocation fetched successfully.)r	   r;   r   deliverabler   )r=   r>   r5   r   r   r@   r   r   rx   r   r   r   r   r   r   r   r   r   r   r   )
rI   rJ   rX   r:  r;  r5   r   	shop_uuidpincoderesponse_datas
             rL   rM   zFetchUserLocationView.postA  s>   ||''7<<((<<D'//333>==($(M ( 2 2I   -HI 
'//333N==($(M ( 2 2I -!!""G (0K !))!++*2--HMM&&T#+#?#?191A1A(**--t !! 8@7G7G8++33T9A9I9IH,,55t (, ( 9 9*
 ||,,,8M.);)*	 
 	
k  ,,  -PQ *  ,,  -UV s&   AH AH0 #H-,H-0#IINr  rT   rN   rL   r8  r8  @  s    N
rN   r8  c                     	 t         j                  j                  || ||      }|j                          y # t        $ r
}Y d }~y d }~ww xY w)N)SendmsgOrderIDsendToDescription)r   r@   rB   rg   rl   )OrderNotification_titlerB  r  notification_datarq   s         rL   notification_stat_postrG    sO    ,44;;DV`eCIXc < e  s   36 	A	A	c                    t        ||||       t        j                  st        j                  d      }t        j
                  |       t        j                  |||j                  dt        j                  d      t        j                  ddit        j                  t        j                  dt        j                  ||      d	d
|j                  i                  |       }	 t        j                  |      }y t        j                  |||j                  dt        j                  d      t        j                  ddit        j                  t        j                  dt        j                  ||      d	d
|j                  i                  |       }	 t        j                  |      }y # t        $ r
}Y d }~y d }~ww xY w# t        $ r
}Y d }~y d }~ww xY w)Nj/var/www/html/Testing_prj/Navya-Bakers/constants/navyabakers-1d955-firebase-adminsdk-fbsvc-d2f9578075.json)titler  orderIDhigh)priorityzapns-priority5c   )rJ  bodydefaultrK  )badgealertsoundcustom_data)aps)headersr   )r=   androidapnsrn   )rG  firebase_admin_appsr)   Certificateinitialize_appr(   Messager  AndroidConfig
APNSConfigAPNSPayloadApsApsAlertsendrl   )	fcmTokenrD  rJ  r  rB  credr;   responserq   s	            rL   send_notificationrh    s   5%=&&uw 	%%d+ ## X++ %%.DiNcNcMM)2D2D5Wb2e(1	5>>?Z\O  		 !~~g.H ## [U^^T))
 %%.DiNcNcMM)2D2D5Wb2e(1	5>>?Z\O   	 ~~g.H/  		2  		s$   (F3 G	 3	GG		GGc                  z    t         j                  s+t        j                  d      } t        j                  |        y y )NrI  )rZ  r[  r)   r\  r]  )rf  s    rL   initialize_fcm_apprj    s4     &&uw%%d+  rN   c                       e Zd ZegZd Zd Zy)CheckOptInViewc                 j    |j                   }t        d|j                  dt        j                        S )Nr   )r	   r*  r   )r5   r   r*  r	   rH   )rI   rJ   r5   s      rL   r>   zCheckOptInView.get  s2    ||++ %%
 	
rN   c                 ,   |j                   }|j                  j                  d      }t        |t              r@||_        |j                          t        dd|j
                  dt        j                        S t        dddt        j                        S )	Nr*  r   z#Opt-in status updated successfully.)r	   r;   r*  r   r   z1Invalid value for opt_in. It should be a boolean.r]   )r5   r=   r>   
isinstanceboolr*  rg   r   r	   rH   rf   )rI   rJ   r5   r*  s       rL   r   zCheckOptInView.put  s    ||!!(+fd# DKIIKD"kk
 ))  R 22 rN   N)rP   rQ   rR   r$   ry   r>   r   rT   rN   rL   rl  rl    s    )*
rN   rl  )Qr   django.shortcutsr   r   rest_framework.viewsr   r   rest_framework.responser   rest_frameworkr	   rest_framework.authtoken.modelsr
   adminportal.tasksr   orders.delhiveryr   r   products.modelsr   r   utils.send_otpr   modelsr   r   r   r   r   shops.modelsr   orders.modelsr   r   r   r   r   r   datetimer   django.utilsr   rE   rest_framework_simplejwt.tokensr    serializersr!   r"   r#   rest_framework.permissionsr$   r   r   r   django.confr%   django.core.mailr&   django.urlsr'   rZ  r(   r)   	django.dbr*   r,   rV   rs   r{   r   r   r   r   r   r   r  r8  rG  rh  rj  rl  rT   rN   rL   <module>r     s#    6 ; , ! 1 7 C 3 . ? ?  \ \  !  7 U U 6 
     &  $ &  ( !
G 
0Q' Qf'  /
g /
b
7 
@F
 F
R"g "H 0e
 e
Po
7 o
b}G }RO
G O
`
CH,!W !rN   