
    `i                       d dl Z d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZ d dlmZ d dl m!Z! d dl"m#Z#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/m0Z0 d dl1Z1d dl2Z2d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 ddl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZB d dlCZCddl9mDZD d dl+mEZE d dlFmFZF d dlGmHZHmIZImJZJ d dlKmLZL d d lmMZM d d!lNmOZO d dlPZPd dl Z d dl"m#Z#m$Z$ d dlmZ d dl m!Z! d dl2Z2d d"lQmRZR d d#l"mSZS d d$lTmUZU d d%lVmWZW d dl-m.Z. d dlXZXdd&l9mYZY d d'l mZZZm!Z! d dlmZ d d(l3m[Z[ d dl Z d d)l\m]Z] ej                  d*k(  reRj                  neRj                  Z^ eRej                  ej                  e^+      Zc eCj                  eCj                  j                          ej                  eh      Zid, Zjd-Zkd.Zld/Zmd0Znd1Zod2Zpekrelr e1j`                  ekelf3      ZqndZqeij                  d4       e.d5        Zse.e.d6               Ztd7 Zud8 Zvd9 Zwd: Zxd; Zyd< Zzd= Z{d> Z|d? Z}d@ Z~dA ZdB ZdC Z	 	 	 	 	 djdDZdE Ze.dF        ZdG ZdHZdI ZdJ ZdK ZdL ZdM ZdN ZdO ZdP Ze.dQ        Ze.dR        ZdS ZdT ZdU ZdV ZdW ZdX ZdY ZdZ Zd[ Zd\ Zd] Zd^ Zd_ Zd` Zda Zdb Zdc Zdd Ze.de        Zd dflmZ dg Zdh Ze.di        Zy)k    N)	b64encode)datetime	timedelta)DES3)padunpad)settings)messages)logout)ValidationError)	send_mail)validate_email)SumCount)model_to_dict)JsonResponse)renderredirect)render_to_string)reverse)timezone)
make_aware)csrf_exempt)Client)SiteSetting)	urlencode)HTTPBasicAuth   )	SkylinkPlanOTTPlanOTTSubscriptionOTTActivationLogOTTAggregatorVerificationCodeIptvRequestSupportVideo	TVChannel)JioHotstarCode)now)pprint)DecimalInvalidOperationROUND_HALF_UP)send_email_from_template)date)Zone)Cashfree)get_object_or_404)login_required)CreateOrderRequest)CashfreePayment)HttpResponser   )PaymentGatewaySettings)MD5SANDBOX)	XClientIdXClientSecretXEnvironmentc                      y)z8Fetch and decode a setting value from SiteSetting model.N )keys    2/var/www/skyplay_api_hub/ott_subscription/views.pyget_setting_valuerA   n   s        rzp_live_rS1MxKUitLtEqBbfVP9XE4hnZepjtHHHbhMfvbz&https://api.msg91.com/api/sendhttp.php437052AwuTl8Nuu367ea608cP1SKYLTD1407165460465145131)authu:   ❌ Razorpay client not initialized. API keys are missing!c           
         | j                   dk7  rt        ddid      S 	 t        j                  }t        j                  }| d| }t        |j                  d            j                  d      }dd	| d
}d}dd|dt               ddddd	}t        j                  |      }t        |      }	t        |	      }
t        |||	|
d      S # t        $ r"}t        dt        |      id      cY d }~S d }~ww xY w)NGETerrorzOnly GET method allowed  status:utf-8application/jsonBasic Content-TypeAuthorizationl   +i	 188598DLie
 ISmobileno)	UserIDUserTypeMobileNoPlanIdTransactionNoSourceOTTSubscriberIDSearchBySearchValue)headers
input_dataencrypted_datadecrypted_check  )methodr   r	   WATCHO_API_USER_NAMEWATCHO_API_PASSWORDr   encodedecodegenerate_transaction_idjsondumpsencrypt_datadecrypt_data	Exceptionstr)requestusernamepassword
auth_valueencoded_auth_valuerd   client_phone_numberre   	json_dataenc_datadec_dataes               r@   encrypt_watcho_payloadr      s   >>U"*C DSQQ*	?  44H33H$:Qxj1J!*:+<+<W+E!F!M!Mg!V !3#)*<)=!>G #-" / !8!:#%%)
J 

:.I#I.H#H-H"("*#+	!    	?#a& 1#>>	?s   B(C	 		C4C/)C4/C4c                 P   | j                   dk7  rt        ddid      S 	 t        j                  | j                        }|j                  d      }|st        ddid      S t        |      }t        ||d	      S # t        $ r"}t        dt        |      id
      cY d }~S d }~ww xY w)NPOSTrK   zOnly POST method allowedrL   rM   encrypted_textz Missing "data" parameter in body  )encrypted_inputdecrypted_outputrh   )	ri   r   ro   loadsbodygetrr   rs   rt   )ru   r   rf   r   r~   s        r@   decrypt_watcho_payloadr      s     ~~W&@A#NN;zz',,'"23*L MVYZZ'7- 0
  	
  ;Wc!f-c::;s$   A A: !A: :	B%B B% B%c                 Z   | j                   j                  dd      j                         }|dk(  r1t        j                  }t        j
                  }t        j                  }n0t        j                  }t        j                  }t        j                  }| d| }|}|}| d| }	t        |	j                  d            j                  d      }
dd|
 d}	 t        j                  ||d	d
      }|j                          |j                         S # t        j                   j"                  $ r t%        ddid      cY S t        j                   j&                  $ r t%        ddid      cY S t        j                   j(                  $ r%}t%        ddt+        |       id      cY d }~S d }~ww xY w)Nselected_stateTNz/get_user_by_phone/rO   rP   rQ   rR   rS   
   Frd   timeoutverifyrK   $SSL certificate verification failed.rh   rM   Request timed out.API request failed: sessionr   upperr	   API_BASE_URLAPI_AUTH_USERNAMEAPI_AUTH_PASSWORDNORTH_API_BASE_URLNORTH_API_AUTH_USERNAMENORTH_API_AUTH_PASSWORDr   rl   rm   requestsraise_for_statusro   
exceptionsSSLErrorr   TimeoutRequestExceptionrt   )ru   phone_numberstateapi_base_urlapi_auth_nameapi_auth_passapi_urlrv   rw   rx   ry   rd   responser~   s                 r@   fetch_user_by_phoner      s    OO 0$7==?Et|,, 22 2222 88 881,@G HH :Qxj)J":#4#4W#=>EEgN +!"4!56G
T<<"US 	!!# }}
 '' [W&LMVYZZ&& IW&:;CHH// TW(<SVH&EFsSSTs*   8D ,F*<+F*)F*F%F*%F*c                    | j                   j                  d      }| j                   j                  d      }|r|}d}n|r|}d}nt        d      S | j                   j                  dd      }|rtt        | |      }|D cg c]  }|D ]  }d|v s|d     }	}}t	        |	      }
|| j                   d<   |
d	k(  r|| j                   d<   |d
   }n|
d	kD  r|	| j                   d<   g }|r|D ]  }d|v s|d   }t        d |D        i       }|j                  |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      |j                  dd      d        || j                   d<   t        j                  j                  d      j                  d      }t        j                  j                  d      j                  d      }|D cg c]I  }|j                  |j                  |j                  r|j                  j                  nd|j                   d K }}d}|rt#        |t$              rd|d
   v r|d
   d   }d
}d}|r>t&        j                  j                  |!      j)                         }|rd	}|j*                  }t-        | d"|||t.        
d	kD  r	ng |
|||||t1        d	d#      t1        d#d$      d%      S c c}}w c c}w )&zEDisplay active OTT platforms and Razorpay key after successful login.emailr   phoneott_subscription:loginzoho_selected_userNUserzoho_all_userr   r   
zoho_usersc              3   J   K   | ]  }d |v s|j                  d i         yw)currentBillingCycleUsageN)r   ).0xs     r@   	<genexpr>z!platforms_view.<locals>.<genexpr>O  s3       %Fqe  DE  fEQUU+Er%J  %Fs   	##name idrv   
account_idrN   profile_imagezdefault_profile.pngaddress_citybillingResetTypebandwidthTemplateName)r   r   rv   r   r   r   rN   r   r   r   r   display_paramactiverM   order_idT	is_activedefault_channel_image_url)r   r   imager   	client_idzott_subscription/platforms.html      )contactverification_typeott_platformrazorpay_keyusers
user_countselected_user	user_datar   tvchannel_listiptv_statusactivation_coderange_1_to_5range_6_to_10)r   r   r   r   lennextappendr#   objectsfilterorder_byr'   r   r   r   urlr   
isinstancelistr%   firstr   r   RAZORPAY_KEY_IDrange)ru   r   r   r   r   r   r   dataitemr   r   r   	user_infobilling_infoplatform_instancetv_channelschannelr   r   r   r   
iptv_entrys                         r@   platforms_viewr   (  sn    OO(E??&&~6L#	#011OO''(<dCM'=	*3W$WRVfWWWZ
 ,5(?3<GOO01$Q<M!^,1GOOL)
 M! 	D~ L	#  %FTa  %F  HJ   K$$%MM&"5#--b1 )j" ="+--b"A&]]7B7&]]7B7'mmHb9%.]]?DY%Z$-MM."$E(4(8(89KR(P-9-=-=>UWY-Z& 		( (5GOOO$%--44H4ENNzZ##**T*:CCJOK #  **LL*1--W]]&&=X((		
N  IM48T]STEU=U!!$T*	KO ((//)/DJJL
K(88O
 '<.)'$q.b &&'"*aq"?  I XTs   ?L:	L:AM c                     | j                   dk(  r&	 t        j                  | j                        }|j	                  d      }|st        ddd      S | j                  j	                  dg       }t        j                  dt        j                  |d	             t        j                  d
|       d }|D ]C  }|D ]8  }d|v s|d   }|j	                  d      }|j	                  d      }	|||	fv s6|} n |sC n |r.|| j                  d<   d| j                  _
        t        d|d      S t        ddd      S t        ddi      S # t        $ r@}
t        j                  dt        |
             t        dt        |
      d      cY d }
~
S d }
~
ww xY w)Nr   userFzNo user selectedsuccessrK   r   zStored zoho_all_user: %s   )indentzSelected User: %sr   r   rv   r   T)r   r   zUser not found in zoho_all_userz Error in store_selected_user: %sr   )ri   ro   r   r   r   r   r   loggerinforp   modifiedrs   rK   rt   )ru   r   r   r   selected_user_datar   r   r   user_idrv   r~   s              r@   store_selected_userr     s   ~~%	E::gll+D HHV,M #@R$STT $OO//DMKK2DJJ}UV4WXKK+]; "&* 	% "D~#F|"&((4.#'88J#7(Wh,??1:.!" & "8J 45+/(#GY$Z[[E<] ^__ E*++	  	ELL;SVDECF CDD	Es<   ?E A-E  -E .E 62E )E 	F5FFFc                  @    t        t        j                  dd            S )z,Generate a random 6-digit verification code.i i?B )rt   randomrandintr>   rB   r@   generate_verification_coder     s    v~~ff-..rB   c                     t               }d}d| }d}t        |||| g       t        j                  j	                  | |t        j                         d       y)zSend OTP to user's email.zYour OTP Verification CodezYour verification code is zyour-email@example.comcode	timestamp)r   defaultsN)r   r   r$   r   update_or_creater   r)   )r   verification_codesubjectmessage
from_emails        r@   send_verification_emailr    s]    24*G*+<*=>G)Jgw
UG4--+(,,.I . rB   c                    t               }d| d| d}t        j                  j                  | |t	        j
                         d       d|  } t        t        d|| t        d}	 t        j                  t        t        |      	      }|j                  d
k(  rd|j                  dS d|j                  dS # t        j                  j                   $ r}dt#        |      dcY d}~S d}~ww xY w)z?Send OTP to user's phone number using the new MSG91 API format.zDear z-, Your Skylink Fibernet Verification Code is .r   )r   r  914)authkeysenderrouter  mobiles	DLT_TE_ID)params   T)r   r   Fr   N)r   r$   r   r  r   r)   AUTH_KEY	SENDER_IDTEMPLATE_IDr   r   MSG91_API_URLr   status_codetextr   r   rt   )r   r   r  r  r  r   r~   s          r@   send_verification_smsr    s    24dVHIZH[[\]G --!+(,,.I . 
 ~&L  F3<<i6GH3&#??$x}}==// 3 3q6223s%   %AB6 'B6 6C+C& C+&C+c           
      D   d}d}d}d}| j                   dk(  rQ| j                  j                  d      }| j                  j                  d      }d}d}| j                  j                  d      dk(  r1d| j                  d	<   d| j                  d<   t	        | d
||||dd      S |rDd|v r	 t        |       d}n1d}t        j                  ||      rd}nt        j                  | d       |rd}	d}|r/t        j                  j                  |      j                         }	n0|r.t        j                  j                  |      j                         }	|dk(  r6d}t        j                  | d       || j                  |rdnd<   t!        d      S |	r\||	j"                  k(  r6d}|| j                  |rdnd<   t        j                  | d       t!        d      S t        j                  | d       nt        j                  | d       nj|rh|s|rdd}
|r&t%        |       d}d}t        j                  | d       n:|r8t&        j(                  }|rt+        ||
       d}d}t        j                  | d       t	        | d
||||d       S # t        $ r t        j                  | d       Y w xY w)!4Login view with OTP verification via email or phone.Fr   Nr   r   r  change_contact1verification_code_sentzott_subscription/login.html0r  code_verifiedr   r   r  @TInvalid email address format.^\+?[1-9]\d{9,14}$Invalid phone number format.r   r   994439*Verification successful with default code!r   r   ott_subscription:platformsVerification successful!,Invalid verification code. Please try again.3The verification code has expired or was not found.r   0A verification code has been sent to your email.r   0A verification code has been sent to your phone.r  r!  r   r   ri   r   r   r   r   r   r   r
   rK   rematchr$   r   r   r   r   r   r   r  r	   SMS_SEND_FLAGr  ru   r  r!  r   r   entered_codeis_valid_emailis_valid_phonephone_regexverification_recordr   sms_send_flags               r@   
login_viewr<    s   "MG~~,,""9-||''(;< <<,-48=GOO45)+GOOI&'#@&<*!2!C   g~M"7+%)N 488K1%)NNN7,JK "&%)"&6&>&>&E&EG&E&T&Z&Z&\#&6&>&>&E&ESZ&E&[&a&a&c#x' $  *VWQX>~N <=="#6#;#;;$(MU\GOO~G>R$$W.HI#$@AANN7,Z[w(]^ .ND'0)-&$+!  *\] ( 6 6 )'48)-&$+!  *\]'8"8&.	;  i ' MNN7,KLM   )I< <JJc           
      D   d}d}d}d}| j                   dk(  rQ| j                  j                  d      }| j                  j                  d      }d}d}| j                  j                  d      dk(  r1d| j                  d	<   d| j                  d<   t	        | d
||||dd      S |rDd|v r	 t        |       d}n1d}t        j                  ||      rd}nt        j                  | d       |rd}	d}|r/t        j                  j                  |      j                         }	n0|r.t        j                  j                  |      j                         }	|dk(  r6d}t        j                  | d       || j                  |rdnd<   t!        d      S |	r\||	j"                  k(  r6d}|| j                  |rdnd<   t        j                  | d       t!        d      S t        j                  | d       nt        j                  | d       nj|rh|s|rdd}
|r&t%        |       d}d}t        j                  | d       n:|r8t&        j(                  }|rt+        ||
       d}d}t        j                  | d       t	        | d
||||d       S # t        $ r t        j                  | d       Y w xY w)!r  Fr   Nr   r   r  r  r  r  z#ott_subscription/loginwithface.htmlr  r   r"  Tr#  r$  r%  r&  r'  r(  r)  r   r   r*  r+  r,  r-  r   r.  r   r/  r0  r1  r5  s               r@   login_face_viewr?  ]  s   "MG~~,,""9-||''(;< <<,-48=GOO45)+GOOI&'#H&<*!2!K   g~M"7+%)N 488K1%)NNN7,JK "&%)"&6&>&>&E&EG&E&T&Z&Z&\#&6&>&>&E&ESZ&E&[&a&a&c#x' $  *VWQX>~N <=="#6#;#;;$(MU\GOO~G>R$$W.HI#$@AANN7,Z[w(]^ .ND'0)-&$+!  *\] ( 6 6 )'48)-&$+!  *\]'@"8&.	C  i ' MNN7,KLMr=  c                 <   | j                   dk(  r| j                  j                  d      }|j                  d      d   }t	        j
                  |      }t        j                  d      }t        j                  |      d   }t        j                  |      }t        j                  |      d   }t        j                  |g|      }d|v r#t        j                  | d       t        d	di      S t        j                  | d
       t        d	di      S t        d	did      S )Nr   r   ,r   zpath_to_reference_image.jpgr   TzFace verification successful!r   zFace verification failed.Fr   rM   )ri   r   r   splitbase64	b64decodeface_recognitionload_image_fileface_encodingscompare_facesr
   r   r   rK   )ru   
image_datar   reference_imagereference_encodingcaptured_imagecaptured_encodingmatchess           r@   verify_facerO    s
   ~~\\%%g.
%%c*1-
  , +::;XY-<<_MaP *99%@,;;NKAN #002D1EGXY7?W&EFD 122NN7$?@E 233E*377rB   c                 .    t        |        t        d      S )z"Logout the user and clear session.r   )r   r   ru   s    r@   logout_viewrR    s    
7O,--rB   c                    | j                   j                  dd      j                         }|dk(  r1t        j                  }t        j
                  }t        j                  }n0t        j                  }t        j                  }t        j                  }| d| d| d}d|i}	|}
|}|
 d| }t        |j                  d            j                  d      }d	d
| i}	 t        j                  |||	dd      }|j                          |j!                         }t#        |t$              r|r|d   S t'        ddid      S # t        j(                  j*                  $ r t'        ddid      cY S t        j(                  j,                  $ r t'        ddid      cY S t        j(                  j.                  $ r%}t'        ddt1        |       id      cY d}~S d}~ww xY w)8
    Fetches unpaid invoices for a given client ID.
    r   r   z/get_all_invoices_from_userid//z/desc/	accountIdrO   rP   rU   rR   r   F)rd   ro   r   r   r   rK   z)Unexpected response format or empty data.rh   rM   r   r   r   N)r   r   r   r	   r   r   r   r   r   r   r   rl   rm   r   postr   ro   r   r   r   r   r   r   r   rt   )ru   r   r   paid_statusr   r   r   r   r   payloadrv   rw   rx   ry   rd   r   response_datar~   s                     r@   get_zoho_invoice_listr[    s    OO 0$7==?Et|,, 22 2222 88 88 <YKqU[\G 	ZG HH :Qxj)J":#4#4W#=>EEgN 	6"4!56GT=='QS\ab 	!!#  mT*} ##*U V_bcc '' [W&LMVYZZ&& IW&:;CHH// TW(<SVH&EFsSSTs1   AD< -D< <,G*+GG3GGGc                 d   | j                   j                  dd      j                         }|dk(  r1t        j                  }t        j
                  }t        j                  }n0t        j                  }t        j                  }t        j                  }| d| }|}|}| d| }	t        |	j                  d            j                  d      }
dd|
 i}	 t        j                  ||dd	
      }|j                          |j                         }|r|S g S # t        j                   j"                  $ r t%        ddid      cY S t        j                   j&                  $ r t%        ddid      cY S t        j                   j(                  $ r%}t%        ddt+        |       id      cY d}~S d}~ww xY w)rT  r   r   z/get_invoice_details/rO   rP   rU   rR   r   Fr   rK   r   rh   rM   r   r   Nr   )ru   
invoice_idr   r   r   r   r   rv   rw   rx   ry   rd   r   rZ  r~   s                  r@   get_zoho_invoice_detailsr^  )  s   
 OO 0$7==?Et|,, 22 2222 88 88 3J<@G HH:Qxj)J":#4#4W#=>EEgN 	6"4!56GT<<"US 	!!#  !.}525'' [W&LMVYZZ&& IW&:;CHH// TW(<SVH&EFsSSTs0   <D D ,F/+F/.F/
F*$F/*F/c                 T   g }d}t        | j                  j                  dd      xs d      }t        | j                  j                  dd      xs d      }t        | j                  j                  dd      xs d      }t        | j                  j                  dd      xs d      }| j                  j                  dg       }|st	        d      S |d   j                  d	d
      }|d   j                  dd
      }	|d   j                  dd
      }
|
j                         dk7  r!d}t        d|||d|d      }t        d|i      S t        | ||d      }|r9|dk(  r4ddj                  |       d}t        d|||d|d      }t        d|i      S t        | ||d      }|s&|dk(  r!d}t        d|||d|d      }t        d|i      S t        j                  j                  dd      j                         }g }t        j                  j                         D ci c]  }|j                  |j                   |j"                  |j$                  xs d
|j&                  xs d
|j(                  r|j(                  j*                  nd
|j,                  r|j,                  j*                  nd
d }}g }g }i }d}d}|dk(  r |d   }t/        | |      }|rzt1        |t2              rit5        |      dkD  rZ|d   }|j                  dg       }|j                  dg       }|j                  dg       }t7        j8                  |d      }t7        j8                  |d      }||z
  j:                  }|j<                  |j<                  z
  dz  |j>                  |j>                  z
  z   }|d k(  rd}n/|d!k(  rd"}n'|d#k(  rd"}n|d$k(  rd"}n|d%k(  rd}n|d&k(  rd}n|d'k(  rd}|| j                  d(<   d)| j                  _         t1        |t2              r$t5        |      dkD  r|d   j                  d*d+      }nFd}d,}t        d|||d|d      }t        d|i      S d}d-}t        d|||d|d      }t        d|i      S 	 tB        j                  j                  |.      }|jD                  }|	jI                         }	|	jK                  d/d0      jK                  d1d0      }|jM                  d0      d   jI                         d2z   } tO        |      }!|!g}"|d"k(  rf|!tO        d3      z  jQ                  tO        d4      tR        5      }#|"jU                  |#       |"jU                  |#dz          |"jU                  |#dz
         nj|dk(  re|!tO        d6      z  jQ                  tO        d4      tR        5      }#|"jU                  |#       |"jU                  |#dz          |"jU                  |#dz
         tV        j                  j                  |"d)d| 7      }$|r%|j                         d8k7  r|$j                  |9      }$|$jY                         }%|| j                  d(<   || j                  d:<   |j[                         | j                  d;<   |j[                         | j                  d<<   || j                  d=<   || j                  d><   |%s!d?}t        d|||d|d      }t        d|i      S |%j\                  j                         }&|&D ]1  }'|'j^                  r|jU                  |'       !|jU                  |'       3 d}(d}(|r&|D ]!  })ta        ||)j                        \  }*}+|*sd}( n g }|D ]  }'|'jb                  j                  },|j                  |,i       }-|-j                  d@d
      }.|-j                  dAd
      }/|-j                  dBd
      }0|-j                  dCd
      }1|-j                  dDd
      }2|'jd                  j                         jg                  dE      }3|3D 4cg c]T  }4|4j                  |4j                   |4j"                  |4jh                  |4jj                  r|4jj                  j*                  ndFdGV }5}4ta        ||'j                        \  }*}+|*rdnd}6|jU                  i dH|'j                  dI|'j"                  dD|'j                   dJ|'jl                  dKdLdM|5dN|6dO|+r|+ndPdQ|d|d|'jb                  j                  dR|'j^                  d@|.dA|/dB|0dC|1dS|2        to        |dT      D ]  \  }7}'|'jb                  j                  },|j                  |,i       }-|-j                  d@d
      }.|-j                  dAd
      }/|-j                  dBd
      }0|-j                  dCd
      }1|-j                  dDd
      }2|'jd                  j                         jg                  dE      }3|3D 4cg c]_  }4|4j                  |4j                   |4j"                  |4jh                  |4jp                  |4jj                  r|4jj                  j*                  ndFdUa }5}4ta        ||'j                        \  }8}+|jU                  i dH|'j                  dI|'j"                  dD|'j                   dJ|'jl                  dKdLdM|5dN|(dO|+r|+ndPdQ|d|d|'jb                  j                  dR|'j^                  dE|7d@|.dA|/dB|0dC|1dS|2i        i }|dk(  ri|dk(  rDt        j                  j                  dV      js                  dW      }9|9ju                  dHd)X      }:n|g}:|:D ]  };|;},|j                  |,i       }-|-j                  d@d
      }.|-j                  dAd
      }/|-j                  dBd
      }0|-j                  dCd
      }1|-j                  dDd
      }2tv        j                  j                  |;dYZ      jy                  d[      jg                  d\      }<|<D ]a  }'|'jz                  }=|=s|dk(  r|; d]|=j                   nt}        |=j                        }>|>|vr|'jd                  j                         jg                  dE      }3|=j                   |3D 4cg c]T  }4|4j                  |4j                   |4j"                  |4jh                  |4jj                  r|4jj                  j*                  ndFdGV c}4||;ddY|'j^                  g d^||><   ta        ||'j                        \  }*}+||>   d_   jU                  |'j                  |'j"                  |'j                   |'jl                  |'j~                  |*rdnd|+xs dP|.|/|0|1|2d`       d  |dak(  rdbnd}?t        |?||||dt5        |      |dc      }t        d|i      S c c}w # tB        jF                  $ r d }Y 	w xY wc c}4w c c}4w c c}4w )dNr   platform_idsky_plan_idr   r   	plan_typer   r   r   r   r   rN   r   zDear customer, your account is currently inactive.<br>
To restore your OTT access, please contact our support team  or <a href='https://www.skylink.net.in/inidvidual-broadband/contact-us/' target='_blank'>click here</a> to resolve the issue.zott_subscription/ott_plans.html)plansr   r`  un_paid_invoice_flagr  htmlunpaidz! Dear customer, Pending invoice: z, z.<br> Please <a href='https://www.skylinknet.in/customer_portal/account/sn' target='_blank'>click here</a> to complete the payment and ensure uninterrupted OTT access.paidzNo paid invoices found.hotstar)rN   r   )r   r   play_store_urlapp_store_urlplay_store_iconapp_store_icondetailsOfInvoicebillingPeriodFrombillingPeriodTo%Y-%m-%d   r      r                  billing_cycleTamount0.00z'Amount not found in details of invoice.zNo invoice details available.)	zone_namembpsMbpsMBPS Mbpsz0.925r  )roundingz0.85)
amount__inbandwidth_verified_flagrN   	bandwidthskyplay)server_typer]  billing_from_datebilling_to_dateinvoice_amountskylink_plan_amountz0No Skylink Plan found with the specified amount.ri  rj  rk  rl  r   r   default_image_url)r   r   r   r   r   r   r   pricesubscription_tiersfreeottsstatus_flagexpiration_datezN/Ahotstar_enabledflexible_plan_flagaggregator_name)start)r   r   r   r   r   r   rM   )r   )flatF)r`  plan_group__isnull
plan_groupplan_group__order_id_)
group_namer  r   r`  r  r  r  rc  rc  )r   r   r   r  validity_monthsr  r  ri  rj  rk  rl  r     zott_subscription/jiostart.html)rc  r   r`  rb  rd  flexible_free_plans_countplans_by_group)@intrJ   r   r   r   lowerr   r   r[  joinr#   r   r   existsallr   r   r   ri  rj  rk  r   rl  r^  r   r   r   r   strptimedaysyearmonthr   r0   service_typeDoesNotExiststripreplacerB  r+   quantizer-   r   r   r   	isoformat	ott_plansr  is_plan_expiredr`  r  r   r   r   r  	enumerater   excludevalues_listr    select_relatedr  rt   r  )@ru   
plans_datary  platform_to_checkra  r   rb  r   r   brand_widthcustomerStatusr  html_contentun_paid_invoice_listpaid_plain_invoicesr  aggaggregators_dictflexible_free_plansnon_flexible_free_plansr  first_invoice_idrx  invoice_detailsfirst_invoicedetails_of_invoicer  r  date_differencezoneclient_service_type
normalizedcleaned_bandwidthbase_amountamounts_to_checkdiscounted_amountskylink_plan_qsskylink_planfree_ott_plansott_planflexible_plan_status_flagany_plan
is_expiredr  r`  platform_datari  rj  rk  rl  r  associated_ottsott	otts_dataplan_statusindexr  aggregatorsaggregator_idsaggregator_idr  group	group_keytemplate_names@                                                                   r@   get_skylink_plansr  \  s   JFGKKOOM1=BCgkkoomQ7<1=KGKKOOK38q9IGKKOOK38q9IOO''<M011 q!%%lB7J"&&'>CK"1%))(B7N)~ ((I",$%L
  V\233 1)ZQYZa7		BV8W7X  Y@  C'(I",$%L
  V\233/JPVW9>+'(I",$%L
  V\233#++22(2SZZ\OJ !((,,.
  	HHHH!006B ..4":=:M:Ms2266SU8;8J8Jc0044PR
 	

 
  NMA~.q127;KLz/4@SEY\]E]+A.M!.!2!23Er!J - 1 12Er J+//0A2FO !) 1 12CZ P&//LO.1BBHHO -114E4J4JJbPTcTiTil}  mD  mD  UD  EM ! !!# !!# !!# !"$ ""$ ""$ " 0=GOOO,'+GOO$,d3<N8ORS8S+A.228VD C/0Q'!*#4,-&T   $V\$:;;F5G+,M#&0()"P L   677	'<<##j#9D"&"3"3
 "'') ((8@@P
&,,V4Q7==?'I* fo'= A!,ww/?!? I I'RU,an I o##$56##$5a$78##$5a$78b !,wv!> H HQT`m H n##$56##$5a$78##$5a$78 &--44'$('	 5 
 #6#<#<#>)#K-44AT4UO ',,.+8((8%.?.I.I.K+,,;,E,E,G)*,2() 28-.HG+,M#&0()"P L   677 &//335 ' 	9H**#**84'..x8		9 %&!$%!/ .=i.U+
O 01- 
 0 0	H #..11K -00bAM*../?DN)--orBM+//0A2FO*../?DN+//;O 'mm//1:::FO +	  &&HHHH!$.1iiSYY]]=P	I 	 +:)X[[*Q'J)!qK hkk  	
 %f 	 { "o?5 "?   x3366 %h&A&A !.   "/  !!" "/# =0	f  ))<AF /	OE8"..11K -00bAM*../?DN)--orBM+//0A2FO*../?DN+//;O&mm//1:::FO +
  &&HHHH!$ #.1iiSYY]]=P
I 
 "1HKK!HA hkk  	
 %f 	 8 "o?5 "?   x3366 %h&A&A E !.    "/!" !#$ "/% 9/	d NA~ !'//66h6GOOU^O_K(44T4EN/0N+ >	M (K -00bAM*../?DN)--orBM+//0A2FO*../?DN+//;O  ..=]b.crrs  A  J  J  Ka  bI% - ++ >ORS=S}oQuxxj9Y\]b]e]eYf	N2&.mm&7&7&9&B&B:&NO ',jj *9! #& '*ff(+(+-0]]:=))I\! *7'4.4+0.6.I.I!#!1N9-( />i.U+
Oy)'299"++$MM$MM%^^'/'?'?(21'6'?%&4%2&5%3&5; A-#>	J 9JQ8N4TuM#M( !%()<%=(4 L .//]
v    	'"&	'H	b
X!s.   Bu:(,u? 4AvA$v Av%
?vvc                 N   | j                   j                  dg       }|r|d   j                  d      nd}t        | j                   j                  dd            }| j                   j                  d      }| j                   j                  d      }d}d}	 | j                   j                  d	      r0t        j                  | j                   d	         j                         }| j                   j                  d
      r0t        j                  | j                   d
         j                         }	 | j                   d   d   d   d   }|&t        j                  |d         j                         }|&t        j                  |d         j                         }|	 t        t        |            }i d|d|d|d|d|d|d|d|d|	d|
d|d|d|d	|d
|d|d|d|i}|
dk(  rj|dk(  re|rc|j                  |j                  d      |j                  d      |j                  d       |j                  d!      |j                  d"      d#d$       |
dk(  rl|d%k(  rg|re|j                  |j                  d&      |j                  d'      |j                  d(      ||j                  d)      |j                  d*d+      d#d,       t        j                  j                  d-i | y# t        $ r Y w xY w# t        t        t        f$ r Y ww xY w# t        t        f$ r d}Y xw xY w).z^
    Common function to log OTT activation (Free / Paid)
    Supports Razorpay & Cashfree
    r   r   r   Nrx  r   r]  r  r  r  r   r   billingStartDatebillingEndDater   r`  plan_idrN   r  inputresponse_statusoutputendpointr  r   payment_gatewaypayment_raw_datarg  razorpayrazorpay_order_idrazorpay_payment_idrazorpay_signaturepayment_amountpayment_currencyT)r  r  r  r  r  payment_verifiedcashfreer   cf_payment_idpayment_session_idorder_amountorder_currencyINR)cashfree_order_idcashfree_payment_idcashfree_payment_session_idcashfree_raw_responser  r  r  r>   )r   r   r  r   fromisoformatr/   
ValueErrorKeyError
IndexErrorr+   rt   r,   updater"   r   create)ru   r   r   r  rN   r  re   r  output_datar  r  razorpay_detailsr  payment_datar   r   rx  r]  r  r  r  current_usagelog_datas                          r@   log_ott_activationr  +  s   , OO''<M-:M!  )E ++OQ?@M$$\2J__(()9:NO??23 ( 6 6 34!df  ??01&44 12df (<=a@CD^_$ ( 6 601!df  "&44./df  !	"$S%89N
Y( 	7 	&	
 	7 	 	? 	+ 	H 	0 	 	 	j 	. 	?  	.!" 	?#$ 	L%H, V#:(EJZ!1!5!56I!J#3#7#78M#N"2"6"67K"L.223CD 0 4 45G H $
 	 V#:(E,!-!1!1*!=#/#3#3O#D+7+;+;<P+Q%1*..~> , 0 01A5 I $
 	 ##/h/S  " j*-  !*- 	"!N	"s8   BK$ ,A(K4 L $	K10K14LLL$#L$c                 "   t         j                  j                  | |      j                  d      j	                         }|sy|j
                  }|r@|j                  d      }t        j                         j                         }||k  rd|fS d|fS y)N)r   r  z-id)FNz%d-%m-%YFT)
r"   r   r   r   r   r  strftimer   r)   r/   )r   r  activation_logr  formatted_expiration_datecurrent_dates         r@   r  r    s    %--44yRY4ZccdijpprN$44O$3$<$<Z$H!||~**, l*333222rB   c                 |   	 t        j                  | j                        }|j                  d      }|j                  d      }|j                  d      }|j                  dd      }t        j
                  j                  |      }|j                  }d }d }	d }
d}|}t        j
                  j                  |||      }t        j                  d	|        t        |       t        d
       t        |       |dk(  rt        d
       t        |       }nF|dk(  rt        |       }n5|dk(  rt        |       }n$|dk(  rt        |       }n|dk(  rt!        |       }nd }t        |       d}|rQ|j"                  }t        j                  |j%                  d            }|d   }	|d   }|	dk(  r|n|d   }
|d   }|d   }nd}	d}
d}|dk(  rz|j                  d      |j                  d      |j                  d      t'        |j                  dd            d z  |j                  d!d"      d#}t)        | |||d$|||	|
|||d%&       nt)        | |||d$|||	|
||       t+        d'|d(      S # t,        $ rQ}t)        | d)t/        |      t/        |      d*t/        |      d       t+        d+t/        |      d(      cY d }~S d }~ww xY w),Nr   r`  r  r  r  r   r   r   r`  r  zObject retrieved: call1watchoplay_boxrh  ottplay	tatabinge/The activation has been completed successfully.rP   r  r  r  r  r  r  r   5Invalid platform ID or failed to fetch platform data.rg  r  r  r  r  r   d   r  r  )r  r  r  r  r  Successr  )r  Tr   r  Failurerh   F)ro   r   r   r   r#   r   r   r!   r  r   r   printfetch_watcho_datafetch_playbox_datafetch_hotstar_datafetch_ottplay_datafetch_tatabinge_datacontentrm   floatr  r   rs   rt   )ru   r   r   r`  r  r  r   platform_coder  r  r  r  re   subscriptionr
   response_contentresponse_jsonr  r~   s                      r@   ott_activationr%    s   PCzz',,'HH[)	hh}-((9%!XX&:FC)11555E).. 
 '..55) 6 
 	(89mgmH$'N-g6Mj(.w7Mi'.w7Mi'.w7Mk)09M MmD,44 JJ'7'>'>w'GHM+,=>O$Y/H&5&<]-PXBYF$Z0H&w/J!OLFH ' &*XX.A%B'+xx0E'F&*hh/C&D"'1A1(E"F"L$(HH-?$G  w	3DgyZbdnp  BH  JR  Tf  hx  NX  Yw	3DgyZbdnp  BH  JR  Tf  gBCC C7I/@'9VYZ[V\^abc^dfiknopkqsu  xJ  	K#a&ABB	Cs   II! !	J;*AJ60J;6J;c                  t    dj                  t        j                  t        j                  d            } d|  S )Nr   rr  )kTRAN)r  r   choicesstringdigits)random_parts    r@   rn   rn     s,    ''&..!<=K+rB   zW8n$e2s5v8y/B?E(H+Kbc                 d    t        j                  | j                               j                         S N)hashlibmd5rl   digest)pass_phrases    r@   get_keyr3    s#    ;;{))+,3355rB   c                 H   t        t              }t        j                  |t        j                        }t        | j                         d      }|j                  |      }t        j                  |      j                         }|j                  dd      j                  dd      S )Nrt  +-rU  r  )r3  PASS_PHRASEr   newMODE_ECBr   rl   encryptrC  r   rm   r  )
plain_textr?   cipherpadded_dataencrypted_bytesr   s         r@   rq   rq     s~    
+
CXXc4==)Fj'')1-Knn[1O %%o6==?N!!#s+33C==rB   c                 (   t        t              }t        j                  |t        j                        }t        j                  | j                  dd      j                  dd            }|j                  |      }t        |d      j                         S )Nr6  r5  r  rU  rt  )r3  r7  r   r8  r9  rC  rD  r  decryptr   rm   )r   r?   r<  r>  	decrypteds        r@   rr   rr   $  sr    
+
CXXc4==)F &&~'='=c3'G'O'OPSUX'YZO/IA%%''rB   c                    t        d       t        j                  }t        j                  }t        j                  }t        |       t        |       t        |       t        j                  | j                        }t        d       t        |       |j                  d      |j                  d      }|j                  d      }t        j                  j                  |      }|j                  }t        d       t               t        |       t        |       t        |       t        |j                  dd            d	k(  }	t        |	       |	d
k(  r}
n1| j                  j                  dg       }t        fd|D        d       }
|
st        ddid      S t         j#                  d       t         j#                  d|
       |
st        ddid      S | d| }t%        |j'                  d            j)                  d      }dd| d}dd|
|t+               dd}t        j,                  |      }t/        |      }t1        |      }t        |       t        |       d|i}t        d       t        |       	 t        j,                  |d      j'                  d      }t3        j4                  |||       }t1        |j6                        }t        j                  |      }|j                  d!      }|j                  d"      }||t1        |j6                        ||d#}t        |d$      S # t8        $ r"}t        dt        |      id%      cY d }~S d }~ww xY w)&Ncall2r   r   r`  r  r  manual_flagr  r  r   r   c              3      K   | ];  }t        |j                  d             t              k(  r|j                  d       = yw)r   r   Nrt   r   r   r   r   s     r@   r   z$fetch_watcho_data.<locals>.<genexpr>|  s:      64488D>"c)n4 XXg 6s   AArK   Client phone number not foundr   rM   zclient_phone_number: zclient_phone_number: %srO   rP   rQ   rR   rS   10984270rW   rX   )r[   r\   r]   r^   r_   r`   	InputDatarequest_dataF)ensure_ascii)rd   r   
ResultCode
ResultDescr  r  r  r  r  saferh   )r  r	   WATCHO_API_URLrj   rk   ro   r   r   r   r    r   r   rt   r   r   r   r   r   r   rl   rm   rn   rp   rq   rr   r   rW  r  rs   )ru   r   rv   rw   r   r`  r  planr   rD  rz   r   rx   ry   rd   re   r{   r|   des_datarK  r   dec_responseresult_coderesult_descresultr~   r   s                             @r@   r  r  ]  s   	'N%%G,,H++H	'N	(O	(O::gll#D	&M	$K%I((=)Khhy!G??'*D99D	+	)	+	'N	$Kdhh}c23s:K	+a'++OR@"6= 6
 W&EFsSS
KK'(
KK)+>?W&EFsSS:Qxj)J":#4#4W#=>EEgN +!"4!56G (13J0 

:&II&HH%H	(O	(OXL 
.	,;JJ|%@GGP	=='	J $HMM2zz,' hh|,hh|,
  )"8==1!
 F// ;Wc!f-c::;s   =B1L/ /	M8MMMc                    t         j                  }t         j                  }t         j                  }t	        j
                  | j                        }|j                  d      }|j                  d      }|j                  d      }t        j                  j                  |      }|j                  }	|dd}
t        |j                  dd            d	k(  }d }|r*t        |j                  dd
            j                         }nM| j                  j                  dg       }d }|D ]*  }|j                  d      |k(  s|j                  dd       } n t        |       |st        ddid      S |||	d}	 t!        j"                  |||
      }|j	                         }|j                  d      }|j                  d      }|||j$                  dk(  r|j	                         n|j&                  ||d}|j$                  dk(  rt        |d      S t        ||j$                        S # t         j(                  j*                  $ r#}t        t        |      |dd      cY d }~S d }~ww xY w)Nr   r`  r  r  rQ   )z	x-api-keyrT   rD  r  r  r   r   r   r   rK   rH  r   rM   )r   
partnerKeypackCodero   rd   
statusCoder  r  rO  FrP  rK   ru   rh   )r	   PLAYBOX_API_URLPLAYBOX_API_KEYPLAYBOX_PARTNET_KEYro   r   r   r   r    r   r   rt   r  r   r  r   r   rW  r  r  r   r   )ru   r   api_keypartner_keyr   r   r`  r  rS  r   rd   rD  rz   r   r   r   rZ  r  r  rX  r~   s                        r@   r  r    s2    &&G&&G..K::gll#D%I((=)Khhy!G??'*D99D *G dhh}c23s:K!$((;";<BBD  ++OR@ #! 	Dxx~*&*hhw&=#	 

W&EFsSS % DL==tWE #''5##I. *)1)=)=)Dhmmo(--
 3&U33x/C/CDD// Lc!f>sKKLs%   0BH H I;IIIc                 	    t        d       t        j                  }t        j                  }t        j                  }t        j
                  }t        |t              r|d   }t        |      j                         }t        j                  | j                        }|j                  d       |j                  d      }|j                  d      }t        j                  j                  |      }|j                   }	t        |j                  dd            d	k(  }
d }d }d }d }|
rrt        |j                  dd
            j                         }|j                  dd
      }|j                  dd
      }|j                  dd
      }|j                  dd
      }nw| j"                  j                  dg       }t%         fd|D        d       }|rD|j                  d      }|j                  d      }|j                  d      }|j                  d      }t        d       |st'        ddid      S |j)                  dd
      j)                  dd
      }d}|||d}dd| d}t+        j                  |||      }	 |j                         }t        d!|       d"}	 |j                  d#i       }|j                  d$      sd"}n|j                  d%      sd&}t        d!|       i d,d-d.|d/|d|d|d|dd0d1|d2|	d3dd4d
d5d
d6d
d7d
d8d
d9d
d:|}dd| d}	 t+        j6                  |||;      }|j                         }|j                  d<      }|j                  d=      }|||j8                  d>k(  r|j                         n|j.                  ||d?}|j8                  d>k(  rt'        |d@A      S t'        ||j8                        S # t,        $ r d |j.                  i}Y Zw xY w# t,        $ rZ}t0        j3                  d'|t        |             t0        j5                  d(|       t'        d)t        |      |d*d+      cY d }~S d }~ww xY w# t*        j:                  j<                  $ r#}t'        t        |      |dBd+      cY d }~S d }~ww xY w)CNsdfr   r   r`  r  r  rD  r  r  r   
first_name	last_namer   r   r   c              3   n   K   | ],  }t        |j                  d             t              k(  r| . yw)r   NrF  rG  s     r@   r   z%fetch_ottplay_data.<locals>.<genexpr>E  s1      6d488D>"c)n4  6s   25r   r   fsdfrK   rH  r   rM   r	  r6  z6https://bundlr.ottplay.com/api/v4.0/subscriber/details)login_id	oper_coder   rQ   zBearer rS   )rd   r  rawzSubscriber Details Response:r   r   plan_detailsplan_details_2r   u>   ⚠️ Error while determining plan slot for subscriber %s: %szSubscriber raw response: %sz0Something went wrong while determining plan slot)rK   detailsraw_responserh   modeCREATE_ACTIVATErk  rj  Skylinkaddress	plan_codeuse_alt_lco_codepartner_reference_idr  service_number
state_codesubscription_typesubscription_id	plan_slotr\  r   r  r  rO  FrP  r^  )r  r	   OTTPLAY_API_URLOTTPLAY_OPER_CODEOTTPLAY_LOGIN_IDOTTPLAY_AUTH_TOKENr   tuplert   r  ro   r   r   r   r    r   r   r   r   r   r  r   rs   r  r   rK   debugrW  r  r   r   )!ru   r   rk  rj  
auth_tokenr   r`  r  rS  r   rD  rz   r   rf  r   rg  r   client_datasub_urlr  rd   sub_responsesub_datar|  data_objr~   rY  r   rZ  r  r  rX  r   s!                                   @r@   r  r    s   	%L &&G**I((H,,J*e$]
 Z&&(J::gll#D%I((=)Khhy!G??'*D99D dhh}c23s:KEJL!$((;";<BBDXXlB/
HH["-	"%xx3++OR@6m 6
 "-//'":OOG,E$0J&??>:L	&MW&EFsSS##C,44S"=J
 GG$F +":,/G
 <<HL.$$& 

((3I<<+||N+I./I 

((3!I 	H 	$	
 	 	Z 	Y 	< 	T 	A 	 	 	" 	b 	R  	2!" 	Y#G. +":,/GO==wH #''/##I. *)1)=)=)Dhmmo(--
 3&U33x/C/CDDQ  .<,,-.  UWjlopqlrs2H=G1v$ 	 	| // Oc!fA#NNOsV   1O 9O BQ *Q OO	Q(AP=7Q=QR"R :R Rc                     dddS Nr  zTataBinge specific data)platformr   r>   rQ  s    r@   r  r        #-FGGrB   c                     dddS r  r>   rQ  s    r@   r  r    r  rB   c                 h   | j                   dk7  rt        ddid      S t        s$t        j	                  d       t        ddid      S 	 t        j                  | j                        }t        |j                  d	d
            dz  }|j                  dd      }|d
k  rt        ddid      S t        j                  dt        j                          t        j                  j                  ||dd      }t        j                  d|        t        |      S # t        j                   j"                  $ r:}t        j	                  dt%        |              t        ddid      cY d }~S d }~wt&        $ r:}t        j	                  dt%        |              t        ddid      cY d }~S d }~ww xY w)Nr   rK   zMethod not allowedrL   rM   u#   ❌ Razorpay client not initializedzRazorpay client not initializedrh   ry  r   r  currencyr  zInvalid amountr   u   🔑 API Key: r   )ry  r  payment_captureu   ✅ Razorpay Order Created: u   ❌ Razorpay API Error: zRazorpay authentication failedi  u   ❌ Unexpected Error: zInternal server error)ri   r   razorpay_clientr   rK   ro   r   r   r  r   r   r	   r   orderr  r  errorsBadRequestErrorrt   rs   )ru   r   ry  r  r  r~   s         r@   create_razorpay_orderr    s   ~~W&:;CHH:;W&GHQTUULzz',,'TXXh*+c188J.Q;*: ;CHH 	nX%=%=$>?@  %%,,  .
 
 	25':;E""??** U/Ax89W&FGPSTT L-c!fX67W&=>sKKLs8   
A"D -A+D F16/E+%F1+F17/F,&F1,F1c                    | j                   dk(  rt        j                  | j                        }|j	                  d      }|j	                  d      }|j	                  d      }|||d}	 t
        j                  j                  |       t        ddd      S t        d	did      S # t        j                  j                  $ r t        d	d
id      cY S w xY w)Nr   r  r  r  )r  r  r  zPayment successfulzSubscription activated.)rN   r  rK   z&Payment signature verification failed.r   rM   Invalid request)ri   ro   r   r   r   r  utilityverify_payment_signaturer   r  r  SignatureVerificationError)ru   r   r  r  r  params_dicts         r@   confirm_paymentr    s    ~~zz',,'"hh'<= HH%89!XX&:; "3#6"4
		a##<<[I  +?Le fgg "34SAA 99 	a*R S\_``	as   ),B% %,CCc                      t        | dddi      S )Nz"ott_subscription/transactions.htmlr   Tr   rQ  s    r@   transactions_viewr    s    '?)TARSSrB   c                    | j                   j                  dd      }| j                   j                  dd      }| j                   j                  dd      }t        j                  j	                         }|r|j                  |      }|dk(  rd| }|j                  |      }|D cg c]  }|j                  |j                  j                  |j                  |j                  j                  d	      |j                  |j                  |j                  |j                   j                  d
      d }}t#        d|id      S c c}w )Nsearchr   sort_byactivation_date
sort_orderdesc)client_id__icontainsr6  z%Y-%m-%d %H:%Mrp  )r   r  r  r  rN   r  r  r  transactionsFrP  )rJ   r   r"   r   r  r   r   r   r`  r   r  r  r  rN   r  r  r  r   )ru   search_queryr  r  r  tr   s          r@   get_transactionsr  
  s+   ;;??8R0Lkkooi):;Gv6J $++//1L #***M VgY-((1L   **yy 0099:JKhh"#"6"6.. 0099*E		
D  .U;;s   &B
Ec                      t        | dddi      S )Nzott_subscription/dashboard.htmlr   Tr  rQ  s    r@   dashboard_viewr  /  s    '<	4?PQQrB   c                     t         j                  j                  d      j                  d      }t	        | dd|d      S )NTr   r   zott_subscription/support.html)r   support_videos)r&   r   r   r   r   )ru   r  s     r@   supportr  2  s<    !))0040@II*UN':_m<noorB   c                      t        | dddi      S )Nzott_subscription/contact.htmlr   Tr  rQ  s    r@   r   r   6  s    ':i=NOOrB   c           
      h   | j                   j                  dg       }|r|d   j                  dd      nd }|r t        j                  j	                  |      nt        j                  j                         }|j	                  d      j                         }|j	                  d      j                  t        d      	      d
   xs d}|j                         }|j                  d      j                  t        d            }|j	                  d      j                  d      j                  t        d      	      }|j                  ddi      j                  d      j                  t        d            j                  d      }	t        |||t        |      t        |      t        |	      d      S )Nr   r   r   r   r   rg  )r  r  )totalr  platform_id__name)countr/   zDATE(activation_date))select)total_revenuetotal_activationstotal_transactionsactivations_by_platformrevenue_by_platformactivations_over_time)r   r   r"   r   r   r  r  	aggregater   valuesannotater   extrar   r   r   )
ru   r   r   base_querysetr  r  r  r  r  r  s
             r@   get_dashboard_datar  ;  s   OO''<M2?a $$T2.TI MV$,,33i3H[k[s[s[w[w[yM '---HNNP "((F(CMMTWXhTiMjkrsxwxM &++- 	01	d	$  	7	#	$	,-	.  	F,C#DE		d	$	&		  &.0#'(?#@#$78!%&;!<  rB   c                 	   | j                   dk(  r	 t        j                  | j                        }|j	                  d      }|st        dddd      S | j                  j	                  dg       }|d	   j	                  d
d      }d }d }d}|D ]N  }|j	                  d      |k(  s|j	                  dd       }|j	                  dd       }|j	                  dd      } n |st        dddd      S t        j                  j                  |t        j                               j                         }	|	r?t        d|	j                  |	j                  r|	j                  j                         nd d      S | j                  j	                  dd       }
| j                  j	                  dd      }| j                  j	                  d      }| j                  j	                  d      }| j                  j	                  d      }| j                  j	                  d      }|r	 t!        j"                  |      }|r	 t!        j"                  |      }|rt'        |t(              r	 t+        |      }| j                  j	                  dd      }	 t/        |      }	 t1        |
      }
|dkD  r|
|z  }
|j3                         }|j5                  dd       j5                  d!d       }|j7                  d       d	   j3                         d"z   }t8        j                  j                  |
d|#      j                         }|
H	 t1        |
      }
|j:                  }t        j                  j                  d|$      j                         }nd }|r||_        t?               |_         d|_!        ||_"        ||_#        ||_$        |_%        |_&        ||_'        d|_(        |jS                          |}||j                  d%|d&}tU        d'||(       t        d|j                  d)      S t        dd*dd      S t        dd-dd.      S # t$        $ r d }Y w xY w# t$        $ r d }Y w xY w# t$        t,        f$ r d }Y w xY w# t$        $ r d}Y w xY w# t$        $ r d}
Y w xY w# t$        $ r d }Y 'w xY w# t        jV                  $ r t        dd+dd      cY S tX        $ r#}t        dt)        |      dd,      cY d }~S d }~ww xY w)/Nr   r   FzClient ID is required.r  r   rM   r   r   r   r   r   r   r   r   r   zClient phone number not found.  )activated_client_idexpired_date__gteT)r   r   expired_dater  rx  Monthlyr]  r  r  r  r   g        r|  r}  r~  r  )ry  r  r  )activated_client_id__isnulltypez+91 9944199445)customer_namejiocodesupport_numbercustomernumberJio_code_activation)r  to_emailcontext_data)r   r   zNo available activation codes.zInvalid JSON data.rh   zInvalid request method.rL   )-ri   ro   r   r   r   r   r   r(   r   r   r/   todayr   r   r  r  r   r  r  r   rt   r+   r,   r  r   r  r  rB  r   jiohotstar_flagr  r)   activated_dateactivated_flagrz   rx  r  r  r  r]  code_provide_countsaver.   JSONDecodeErrorrs   )ru   r   r   r   r  rz   client_mailclient_namer   existing_codery  rx  r]  billing_from_date_strbilling_to_date_strr  r  r  r  r  r  	code_type
code_entryr  r  r~   s                             r@   get_jio_hot_start_coder  k  s(   ~~\	S::gll+D-I #BZ$[dghh $OO//DM'*../FKK #'K K% 88D>Y.*.((7D*A'"&((7D"9K"&((66":K '#Bb$clopp +2299ilplvlvlx9y  BM#}?Q?Q  N[  Nh  Nhcpc}c}  dH  dH  dJ  nr %  __(()>EF $OO//KM ,,\:J$+OO$7$78K$L!")//"5"56G"H$__001ABN %-(0(>(>?T(U% #+&.&<&<=P&QO
 *^S"A*%,^%<N $OO//CM" #M 2
v
 q -/%++-K$,,VV<DDVVTJ * 0 0 8 ; A A Cg M&..55(,+ 6  eg	  !&"6]F !- < <I!/!7!7!>!>48& "? " eg  "
1:
.,/E
),0
)1D
.+8
(,:
)/@
,-<
*(2
%01
-! ( &1)&6&9	  )"7%!- $joo$NOO#Bb$clopp :ST]`aaa " -(,%- " +&*O+ #$45 *%)N*  " !"  R " &!%J&L ## 	aE>R S\_`` 	SEc!f EcRR	Ss  AR  AR  %A
R  0BR  2B&R  P. .R  1Q  R  Q $R  Q* Q< BR  ,AR 2BR  R  .P=9R  <P==R   QR  QR  Q'#R  &Q''R  *Q95R  8Q99R  <RR  
RR  RR  RR   #S0S0S+%S0+S0c           
         | j                   dk(  r	 | j                  j                  dg       }|st        d      S |d   j                  dd      }|d   j                  dd      }|d   j                  dd      }|r|st	        d	d
d      S t
        j                  j                  |||t        j                               }d| }d| d| d| d|j                  j                  d       d	}|}dg}	t        j                  }
|
rt        ||||	       t	        ddd      S t	        d	dd      S # t        $ r9}t         j#                  dt%        |              t	        d	dd      cY d }~S d }~ww xY w)Nr   r   r   r   r   r   r   r   FzSession data missingr  )r   r   r   requested_atzNew IPTV Activation Request : u8   🎬 New IPTV Activation Request

📌 User Name      : u   
📞 Phone Number   : u   
📧 Email          : u   
🕒 Requested At   : z%Y-%m-%d %I:%M %pzF

Please process this request and share the IPTV code with the client.zinfo@skylink.net.inTzRWe have received your request!. We will be sharing the IPTV code with you shortly.zIPTV request failed: zKSomething went wrong while processing your request. Please try again later.r  )ri   r   r   r   r   r%   r   r  r   r)   r  r  r	   MAIL_SEND_FLAGr   rs   r   rK   rt   )ru   r   r   r   r   iptvr  r  r  recipient_listmail_send_flagr~   s               r@   request_iptvr  	  s   ~~,	N#OO//DM  899 &a(,,T26I(+//<L!!$(("5E L#BX$YZZ &&--#)%\\^	 . D 7|nEG))2 4))5 7)). 0))-):):)C)CDW)X(Y ZW	W  J34N &44N'7JGD  >R  !S  T  T E6GHII	  	NLL0Q9:E  ?L  !M  N  N	Ns*   (D/ AD/ BD/ /	E18.E,&E1,E1c                 n   	 t        j                  | j                        }|j                  d      }|st	        dddd      S 	 t        |d      }t	        |      S # t         j                  $ r t	        dddd      cY S w xY w# t        $ r&}t	        dd	t        |       dd
      cY d }~S d }~ww xY w)NFzInvalid JSON.r  r   rM   r   zPhone number is required.r   zError sending OTP: rh   )	ro   r   r   r  r   r   r  rs   rt   )ru   r   r   rX  r~   s        r@   send_iptv_otpr  A	  s    Xzz',,' HHWE:UV_bccg&uf5   X/JSVWWX  g<OPSTUPVx:XYbeffgs/   A B #BB	B4B/)B4/B4c                    t        j                  | j                        }|j                  d      }|j                  d      }|r|st	        ddd      S |dk(  r|| j
                  d<   t	        dd	i      S 	 t        j                  j                  |
      }|j                  |k(  r|| j
                  d<   t	        dd	i      S 	 t	        ddd      S # t        j                  $ r Y #w xY w)Nr   r   FzVerification code is required.r  r(  verified_iptvr   Tr'  zBThe verification code is invalid or has expired. Please try again.)
ro   r   r   r   r   r   r$   r   r   r  )ru   r   r   r   records        r@   verify_iptv_otpr  W	  s    ::gll#DHHWE88FDd:Z[\\x+0(Y-..!))--5-A;;$/4GOOO,D 122  E6z{|| (( s   6A
C C&%C&c           
         t         j                  j                  d      }t        d|j	                          d       g }|D ]d  }|j
                  |j                  ddd}|j                  }|j                  }t        | |      }d }|D ]W  }	t        |	t              s|	st        |	d   t              s+|	d   j                  d	i       }
|
j                  d
      |k(  sU|
} n |sd|d<   |j                  |       |j                  d      }t        | ||d      }|sd|d<   |j                  |       |d   }t        | |      }|rt        |t              sd|d<   |j                  |       -|d   }|j                  dg       }|j                  dd      }|j                  dd      }	 t!        j"                  |d      }t!        j"                  |d      }|j$                  |j$                  z
  dz  |j&                  |j&                  z
  z   }|dv rd}n|dv rd}d}t)        |      dkD  r!	 |d   j                  dd      }t+        |       ||_        ||_        ||_        ||_        ||_        |j;                          |j=                  d|||||d       |j                  |       g t?        |j	                         |dd !      S # t,        t.        f$ r d}Y w xY w# t,        $ r}d| |d<   Y d }~_d }~ww xY w"NT)invoice_id__isnullzFound z records without invoice_id.skippedr   )	record_idr   rN   reasonr   r   r   zUser not matchedr  r   rg  zNo paid invoiceszInvalid invoice detailsrm  rn  ro  rp  rq  )rs  rt  r   )ru  rv  rw  rz  r   ry  updated)rN   r]  ry  rx  billing_from
billing_tozDate error: )total_recordsupdated_summaryFrP  ) r"   r   r   r  r  r   r   r   r   r   r   dictr   r   r[  r^  r   r  r  r  r   r+   r  r,   rx  r  r  r  r]  r  r  r   ru   recordsupdated_recordsr  record_datar   r   r   matched_usersectionr   r   paid_invoicesr  r  invoicero  r  r  r  r  rx  ry  r~   s                           r@   "assign_invoice_data_to_old_recordsr  o	  sE   &&---FG	F7==?##?
@AO T,))	
 **$$	'>	  	G'4(WGAJPT9U#AJNN626	==&)3#,L	 $6K!"";/!%%l3
-gy*fU$6K!"";/(+27;KLj$&G$=K!"";/!!$++0"5{{#6;[[!2B7
$	7 ( 1 1,
 K&//
JGO,114E4J4JJbPTcTiTil}  mD  mD  UD  EM& !,. "F7|a$$QZ^^Hf=FFO
 $1F $*F!'8F$%4F" 0FKKM#. !. ,(   	{+iT,l  *  3 #$45 $#F$(  	7&21#$6K!	7>   +A?K+ KAKKKKK	K:(K55K:c           
         t         j                  j                  d      }t        d|j	                          d       g }|D ]d  }|j
                  |j                  ddd}|j                  }|j                  }t        | |      }d }|D ]W  }	t        |	t              s|	st        |	d   t              s+|	d   j                  d	i       }
|
j                  d
      |k(  sU|
} n |sd|d<   |j                  |       |j                  d      }t        | ||d      }|sd|d<   |j                  |       |d   }t        | |      }|rt        |t              sd|d<   |j                  |       -|d   }|j                  dg       }|j                  dd      }|j                  dd      }	 t!        j"                  |d      }t!        j"                  |d      }|j$                  |j$                  z
  dz  |j&                  |j&                  z
  z   }|dv rd}n|dv rd}d}t)        |      dkD  r!	 |d   j                  dd      }t+        |       ||_        ||_        ||_        ||_        ||_        |j;                          |j=                  d|||||d       |j                  |       g t?        |j	                         |dd !      S # t,        t.        f$ r d}Y w xY w# t,        $ r}d| |d<   Y d }~_d }~ww xY wr  ) r(   r   r   r  r  r   r  rz   r   r   r   r  r   r   r[  r^  r   r  r  r  r   r+   r  r,   rx  r  r  r  r]  r  r  r   r  s                           r@   2assign_invoice_data_to_old_records_for_jio_hotstarr  	  sE   $$++t+DG	F7==?##?
@AO T,33	
 11..	'>	  	G'4(WGAJPT9U#AJNN626	==&)3#,L	 $6K!"";/!%%l3
-gy*fU$6K!"";/(+27;KLj$&G$=K!"";/!!$++0"5{{#6;[[!2B7
$	7 ( 1 1,
 K&//
JGO,114E4J4JJbPTcTiTil}  mD  mD  UD  EM& !,. "F7|a$$QZ^^Hf=FFO
 $1F $*F!'8F$%4F" 0FKKM#. !. ,(   	{+iT,l  *  3 #$45 $#F$(  	7&21#$6K!	7r  c                 f   | j                   dk(  rn	 t        j                  | j                        }|j	                  d      }|st        ddd      S || j                  d<   d| j                  _        t        ddi      S t        dd
d      S # t        j                  $ r t        dd	d      cY S w xY w)Nr   r   FzState is requiredr  r   Tr   zInvalid JSONr  )	ri   ro   r   r   r   r   r   r   r  )ru   r   r   s      r@   store_selected_stater  7
  s    ~~	O::gll+DHHW%E#BU$VWW 16GOO,- (,GOO$D 122 E6GHII ## 	OEn MNN	Os   ?B ,B !B0/B0c                     t        | d      S )Nz!ott_subscription/terms/terms.htmlr  rQ  s    r@   termsr  Q
  s    '>??rB   c                     t        | di       S )Nz"ott_subscription/terms/refund.htmlr  rQ  s    r@   refundr
  T
  s    
> A  rB   c                     t        | di       S )Nz&ott_subscription/terms/contact_us.htmlr  rQ  s    r@   
contact_usr  X
  s    
B E  rB   c                     t        | di       S )Nz#ott_subscription/terms/privacy.htmlr  rQ  s    r@   privacyr  \
  s    
? B  rB   c                    | j                   j                  d      }| j                   j                  d      }| j                   j                  d      }| j                   j                  d      }t        j                  }t        j                  dk(  rdnd}t
        j                  j                  d	      }t        | d
|||||||d      S )Nr   r`  r  ry  r9   sandbox
productionT)r   z,ott_subscription/select_payment_gateway.html)r   r`  r  ry  r   cf_modeactive_gateways)	rJ   r   r	   r   CASHFREE_ENVr7   r   r   r   )ru   r   r`  r  ry  r   r  r  s           r@   payment_popupr  c
  s    ,I++//-0Kkkooi(G[[__X&F++L#00I=i<G,44;;4;HO'I"$*L  rB   c                    t        j                  | j                        }|d   }|d   }|d   }|d   }| j                  j	                  dd      }| j                  j	                  dd      }t
        j                  j                  |||d	t        j                         j                   |d
d||	      }t        |j                  t        |j                        d
d| ||dd| j                  d|j                         i      }	t         j#                  t$        j&                  |	d d       }
|
j(                  j*                  |_        |j-                          t/        |j*                  |j                  d      S )Nr   r`  r  ry  r   ztest@test.comr   
9999999999skyr  Pending)	r   platform_id_idr  r   ry  r  payment_statuscustomer_emailcustomer_phoneOTT_)customer_idr  r  
return_urlz,/ott_subscription/cashfree-success/?orderId=)r   r  r  customer_details
order_meta)r  r   )ro   r   r   r   r   r5   r   r  uuiduuid4hexr4   r   r   ry  build_absolute_uricashfree_clientPGCreateOrderr	   CASHFREE_API_VERSIONr   r  r  r   )ru   r   r   r`  r  ry  r   r   paymentcreate_order_requestr   s              r@   create_cashfree_paymentr,  y
  s{   ::gll#D[!I}%K9oG(^F OO9E??&&~|DL %%,,"

(()* # - G .!!7>>*!)-#*
 '44>w?O?O>PQ
$ ,,%%	H "*!A!AGLLN%88$$  rB   )r   c                 (   t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              r| D cg c]  }t        |       c}S t        | t
              r| j                         S | S c c}}w c c}w r.  )r   r  itemsserialize_for_jsonr   r   r  )objr'  vis       r@   r/  r/  
  sw    #t58YY[ATQ%a((AA	C	/23!"1%33	C	"}}
 B3s   B	Bc                 P   |j                  d      }|j                  d      }|j                  d      }|j                  dd      }t        j                  j                  |      }|j                  }d }d }	d }
d}|}t        j                  j                  |||      }t        d	       t        |        |d
k(  rt        |       }nC|dk(  rt        |       }n2|dk(  rt        |       }n!|dk(  rt        |       }n|dk(  rt        |       }d}|rt        j                  |j                  j                  d            }|j                  d      }	|j                  d      }|j                  d      }
|j                  d      }|j                  d      }nd}	d}
|dk(  rxi }|j                  d      |j                  d      |j                  d      |j                  d      |j                  dd      d}t!        | |||d |||	|
||||dk(  rd!nd |"       |S t!        | |||d |||	|
||       |S )#Nr   r`  r  r  r  r  r   r  ru   r  r  rh  r  r  r  rP   r  r  r  r  r  r   r  rg  r   r  r  r  r  r  )r   r  r  r  r  r  r  )r  r  )r   r#   r   r   r!   r  r  r  r  r  r  r  ro   r   r  rm   r  )ru   r   r   r`  r  r  r   r!  r  r  r  r  re   r"  r
   r$  r  r  s                     r@   _ott_activation_corer4  
  sY   %I((=)Khhy!G"6?%--11[1A%**MMOFHJ"**11% 2 L 
)	'N )'2	*	$*73	)	#*73	)	#*73	+	%,W5@H

=#8#8#?#?#HI'++,=> $$Y/""8, $$Z0"&&w/
HV# HHZ0!%/!:&*hh/C&D $)9 :"&((+;U"C 	*<*FJD%	
> O 		
 OrB   c                 d   | j                   j                  d      xs | j                  j                  d      }|st        dddd      S t        j
                  j                  |      j                         }|st        dddd	      S t        j                  t        j                  |j                        }|j                  }t        d
|       t        |dd      }t        |dd      }t        |dd      }t        |dd      }|dk(  rdnd|_        ||_        ||_        ||_        ||_        |dk(  rt+        j,                         nd|_        	  t        |dd              }	t1        |	      |_        |j7                          |dk(  r G d d      }
|j8                  |j:                  j<                  |j>                  dtA        |jB                  xs d      |jD                  xs d|||t1        	      d
} |
||       }tG        ||       tI        | d d!|i      S # t4        $ r ddi|_        Y w xY w)"zn
    Cashfree redirect after payment.
    Verifies order with Cashfree and logs payment + OTT activation.
    orderIdFzMissing orderIdr  r   rM   )r   zInvalid orderr  zCashfree Data:order_statusFAILEDr   r   reference_idr  PAIDPaidFailedNto_dictc                      i S r.  r>   r>   rB   r@   <lambda>z"cashfree_success.<locals>.<lambda>E  s    B rB   rK   z%Failed to serialize Cashfree responsec                       e Zd ZddZy)&cashfree_success.<locals>.DummyRequestNc                     t        j                  |      j                  d      | _        |rt	        |di       ni | _        t	        |dd       | _        t	        |di       | _        y )NrP   METAr   r   )ro   rp   rl   r   getattrrC  r   r   )self	data_dictoriginal_requests      r@   __init__z/cashfree_success.<locals>.DummyRequest.__init__Q  sU     JJy188A	EUG$4fbA[]	#$4fdC	&'7BGrB   r.  )__name__
__module____qualname__rH  r>   rB   r@   DummyRequestrA  P  s    HrB   rL  rg  r   r  )
r   r`  r  r  r  r  r   r  r  rp  )rG  z%ott_subscription/payment_success.htmlr*  )%rJ   r   r   r   r5   r   r   r   r'  PGFetchOrderr	   r)  r   r   r  rD  r  
payment_idr  r  cashfree_order_statusr   r)   paid_atr/  r  rs   r  r   r`  r   r  r   ry  r  r4  r   )ru   r   r*  r   r   r7  r  cashfree_payment_refr  raw_datarL  ott_request_data	dummy_reqs                r@   cashfree_successrU    s;    {{y)HW\\-=-=i-HH:KLUXYY%%,,h,?EEGG/JSVWW ++%%H ==D	
D! 4:Lj"5"4< ';R@ (4v'=V8G*G"6G*<G'$0G!(4(>hllnDGO[774J79(:8(D% LLN v	H 	H !**"..11"(#GNN$7a8 ' 0 0 9E)1"4.x8
 !!1GL	 		
 /	G M  [)02Y(Z%[s   #H H/.H/)r   r  NNN)rC  r   r/  ro   loggingr   r2  r*  r   r   Crypto.Cipherr   Crypto.Util.Paddingr   r   django.confr	   django.contribr
   django.contrib.authr   django.core.exceptionsr   django.core.mailr   django.core.validatorsr   django.db.modelsr   r   django.forms.modelsr   django.httpr   django.shortcutsr   r   django.template.loaderr   django.urlsr   django.utilsr   django.utils.timezoner   django.views.decorators.csrfr   twilio.restr   r  r   setting.modelsr   urllib.parser   requests.authr   modelsr   r    r!   r"   r#   r$   r%   r&   r'   urllib3r(   r)   r*   decimalr+   r,   r-   email_template.utilsr.   r/   pricing_plan.modelsr0   rE  cashfree_pg.api_clientr1   r2   django.contrib.auth.decoratorsr3   'cashfree_pg.models.create_order_requestr4   r#  r5   r6   r7   Crypto.Hashr8   r  r9   
PRODUCTIONCASHFREE_APP_IDCASHFREE_SECRET_KEYr'  disable_warningsr   InsecureRequestWarning	getLoggerrI  r   rA   r   RAZORPAY_SECRETr  r  r  r  r  rK   r   r   r   r   r   r   r  r  r<  r?  rO  rR  r[  r^  r  r  r  r%  rn   r7  r3  rq   rr   r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r
  r  r  r  r,  r/  r4  rU  r>   rB   r@   <module>r|     si         	  (  *   # & 2 & 1 ' - $ - 3  ! , 4    & " '
 
 
  " %  < < 9  $   - # $  , . 9 F 4  # 2   1   	) 			  &&..   ++BB C			8	$C* ,, 9'	# %hooO_+MNOO
LLMN .? .?` ;  ;00TnfT),^/$3H[|[~8@.BTJ0TfL0r u0n* QC QCh 
 %6	>(rp;fJLZUOnH
H #L #LL B B>T <JRpP
-``bF0Jf ,}0_F_JJ4@, ; ;z Wp R RrB   