
    hp                       d dl mZmZ d dlmZmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' d dl(m)Z)m*Z*m+Z+ d dl mZm,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3 d d	l4m5Z5m6Z6 d d
l7m8Z8 d dl9m:Z: d dl(m;Z; d dl<m=Z= d dl>m?Z? d dl@mAZA d dlBmCZCmDZDmEZE d dlFmGZGmHZHmIZImJZJmKZKmLZLmMZM d dlNmOZOmPZPmQZQ d dlRmSZS d dlTmUZU d dlVmWZW d dlXmYZY d dl/mZZZm[Z[ d dl\m]Z]m^Z^ d dl_m`Z` d dlBmEZEmDZD d dlambZb d dlcmdZd d dlemfZf d dlgmhZh d dlcmiZi d d ljmkZk d d!llmmZm d d"lnmoZompZp d d#lqmrZrmsZs d d$lqmtZtmrZrmsZs d d%lumvZv d d&lwmxZx d d'lymzZzm{Z{ d d(l|m}Z} d d)l~mZmZ d d*lmZ d d+lmZ d d,lmZ d d&lwmxZx d d-lmZ d d.lZd d/lmZ d d0lmZmZ d d+lmZ d d1lmZmZmZ d d2lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ d d3lmZ d d.lZd d.lZd d.lZd d.lZd d.lZd d.lZd d.lZd d4lumZ d d5lmZ d d6l>mZ d d7lmZmZmZmZ d d8lmZ d d9lmZ d d:l7mZ d d;lBmZ d d<lmZ d d.lZ eZ       Zd= Z	  ed>g       eezg      d?               Z ed>g       eezg      d@               Z ed>g       eezg      dA               Z	 	  edBg       eezg       eeeg      dC                      Z	 	  ed>dDg       eezg       eeeg      evj                  dE                             Z edBg       eezg       eeg      dF                      Z edBg       eezg       eeg      dG                      Z edHg       eezg      dI               Z edBg       ee{g      dJ               Z edBg       ee{g      dK               Z edBg       ee{g      dL               Z	  edBg       ee{g      dM               Z edBg       ee{g      dN               Z edBg       ee{g      dO               Z	  edBg       ee{g      dP               Z	  ed>g       ee{g      dQ               Z ed>g       ee{g      dR               Z ed>g       ee{g      dS               Z ed>g       ee{g      dT               ZdU Z ed>g       eezg      dV               Z	  ed>g       eezg      dW               Z	 d d.lZd dXl(mZ  ed>dDg       eezg      evj                  dY                      Z	  edBg       eezg      evj                  dZ                      Z ed>dBg       eezg      d[               Zebd\        Z	 evj                   edHg       eezg      d]                      Z edBg       eezg      d^               Z	  ed>g       eezg      d_               Z	  ed>g       eezg      d`               Z	 	 	  ed>g       eezg      da               Z ed>g       ee{g      db               Z	 d dXl(mZ d d.lZdc Zdd ZddeZdf Zg dgZ edBg       eezg       eeeg      dh                      Z	 	 	  ed>g       eezg      di               Z	 	  edDg       eezg       eeeg      evj                  dj                             Z	 d dklmZ dl Z ed>dBg       eezg       eeeg      evj                  dm                             Z ed>dBg       eezg      dn               Z	 	 	 	 	 do Z	 	 d dplumZ d d5lmZ  edDg       eezg      dq               Z	 d d.lZd drl>mZ 	 	  edHg       eezg      ds               Z	  edBg       eezg       eeg      dt                      Z edBg       eezg       eeg      du                      Z	 	  ed>g       eezg      dv               Z	 ddwZdx Zh ed>dBg       eezg      dy               Z	 	 	 	 dz Zh ed>dBg       eezg      d{               Z ed>dBg       eezg      d|               Zd} Zh	  ed>dBg       eezg      d~               Z	  ed>dBg       eezg      d               Z	 d dlmZ  ed>dBg       eezg      d               Z ed>g       eezg      d               Z ed>dBg       eezg      d               Z 	 	 	  edBg       eezg      d               Z edBg       eezg      d               Z edBg       eezg      d               Z edBg       eezg      d               Z edBg       eezg      d               Zd Zd Zy.)    )renderredirect)UserClientCompany	ClientLogMenuUserPermissionsCities	CountriesStateAssocClientCompanyAirlinesLoginOTPClientPassportClientDocumentClientTravelInsuranceClientFrequentFlyer
ClientVisar   
EmailSetupClientDataViewCompanyDataView)CompanyFormUserFormCustomLoginFormUserCreateFormUserUpdateFormr   CompanyFormSetOTPVerificationFormForgotPasswordFormResetPasswordFormFrequentFlyerFormClientPassportFormAssocClientCompanyFormOtherDocumentFormClientVisaFormClientTravelInsuranceForm)HttpResponseRedirectHttpResponseHttpResponseBadRequest)r   get_object_or_404)login_required)authenticatelogin)messages)	LoginView
LogoutView)reverse_lazy)url_has_allowed_host_and_scheme)JsonResponse)render_to_string)
make_aware)	Paginator)QValueF)generate_otpsend_login_otpsend_forgot_password_otpget_assigned_menunormalize_client_payload_find_non_serializablesconvert_datetime)serialize_instancebuild_changesnormalize_value)get_random_string)View)	send_mail)settings)get_user_modelupdate_session_auth_hash)check_passwordmake_password)Concat)r:   r9   )csrf_exempt)require_http_methods)method_decorator)
parse_date)require_POST)
DateFormat)escape)formset_factoryinlineformset_factory)get_module_permsrequire_menu_perm)build_session_permissionsrW   rX   )transactionResponse)IsAuthenticatedAllowAny)Token)RefreshToken
TokenError)TokenAuthentication)APIViewstatus)DjangoJSONEncoderN)
JSONParser)MultiPartParser
FormParser)api_viewpermission_classesparser_classes)CompanySerializerCompanydataSerializerCountrySerializerStateSerializerCitySerializerClientDataSerializerCompanyDataSerializerFullClientSerializerAirlinesSerializerAddFamilyMemberSerializerEmailSetupSerializerrs   ClientSerializerClientTravelInsuranceSerializerClientPassportSerializerClientVisaSerializerOtherDocumentSerializerAssocClientCompanySerializerFrequentflyerSerializerClientDeleteSerializer)AnonymousUser)
connection)timezone)	localtime)datetime	timedeltadatetime)
ClientForm)get_user_assigned_menus)reverse)Prefetch)call_commandc                     	 t         j                  j                  dd      j                  | |      S # t         j                  $ r Y y w xY w)Nref_userref_menu)r   ref_menu_id)r
   objectsselect_relatedgetDoesNotExist)usermenu_ids     9D:\Kush\my_value_trip_django\my_value_trip\users\views.pyget_menu_permissionsr   l   sJ    &&55j*MQQ[_mtQuu''    03 A	A	GETc                    d}t        | j                  |      }t        j                  j	                         }t        |d      }|j                  }|j                  d      j                         }|j                  d      j                         }t        d||||r:|j                  |j                  |j                  |j                  |j                  dni dt        j                   	      S )
N   Tmanyactive)company_statusinactivecan_viewcan_addcan_edit
can_delete
can_export)successdatar   r   permissionsrd   )r   r   r   r   allrn   r   filtercountr\   r   r   r   r   r   re   HTTP_200_OK)requestr   perms	companies
serializerr   active_countinactive_counts           r   company_listr      s     G w7E##%I&yt<J??D##8#<BBDL%%Z%@FFHN"  }}****
    " "    c                    | j                   j                  dd      j                         }t        |      dk  rt	        g ddd      S t
        j                  j                  t        |      t        |      z  t        |      z  t        |	      z  t        |
      z  t        |      z  t        |      z  t        |      z        j                  ddd      }g }|D ]  }|j                  |j                  |j                  |j                  xs d|j                  xs d|j                  |j                   r|j                   j"                  nd|j$                  r|j$                  j"                  nd|j&                  r|j&                  j"                  nd|j(                  dk(  rdndd	        t	        d||j+                         |j+                         dt,        j.                        S )Nsearch_text    r   )r   recordsTotalrecordsFiltered)company_name__icontains)gst_name__icontains)gst_no__icontains)company_address__icontains)company_city__name__icontains)company_state__name__icontains) company_country__name__icontains)+company_account_concerned_person__icontainscompany_citycompany_statecompany_countryr   ActiveInactive)	idcompany_namegst_namegst_nocompany_addresscitystatecountryre   T)r   r   r   r   rd   )r   r   striplenr4   r   r   r   r8   r   appendr   r   r   r   r   r   namer   r   r   r   re   r   )r   r   r   r   companys        r   search_companyr      s    ++//-4::<K
;!RqQRR&&	+.	k*	+	K(	) 	
[1	2 	
4		5
 	
5	6 	
;7	8 	
kB	C n^_6GH  D**#00((.Bnn*&66181E1EG((--23:3H3HW**//b7>7N7Nw..33TV")"8"8H"Dh*

 
	  !)$??,	
   " "r   c                     t        t        |      }t        |d| i      }d|j                  r|j                  j                  nd i}t        d|j                  |dt        j                        S )Nr   r   contextgst_document_fileT)r   r   company_datard   )	r+   r   rs   r   urlr\   r   re   r   )r   
company_idr   r   r   s        r   company_viewr      sp      J7G&wG8LMJg>W>WW66::]aL ??$   	" "r   POSTc           
      |   | j                   }g }d}	 d| d}i }d}|j                         D ]C  \  }}|j                  |      s|j                  | dd      j                  dd      }	|||	<   d}E |sn|j	                  |       |dz  }z|st        dd	d
t        j                        S t        |dd| i      }
|
j                         rJ|
j                  dd      }t        ddt        |dd| i      j                   dt        j                        S t        d|
j                  dt        j                        S )Nr   Tz
companies[]F[r      z No company data found in requestr   messagerd   r   r   r   r   r   )r   	is_activez)Company or companies created successfullyr   r   r   r   r   r   errors)r   items
startswithreplacer   r\   re   HTTP_400_BAD_REQUESTrm   is_validsaveHTTP_201_CREATEDr   )r   r   r   indexprefixr   has_datakeyvaluefieldr   	instancess               r   company_creater     su    <<D IE
eWA&**,JC~~f%vhaL"5==c2F&+U#	 ' &
 " 9
 --/ 	/ #	yRYFZ[JOO# $ 
	 B%idYPWDXY^^
 ))	+ 	+ ## ))+ +r   PUTc           	      t   t        t        |      }| j                  dk(  r| j                  }d|vr|j	                         }|j
                  |d<   t        ||dd| i      }|j                         rX|j                         }t        dd|j                  |j
                  t        |      j                  dt        j                  	      S t        d
|j                  dt        j                  	      S t        |      }t        d|j                  |j
                  |j                  dt        j                  	      S )Nr   r   r   Tr   )instancer   partialr   zCompany updated successfully)r   r   r   r   r   rd   Fr   )r   r   r   r   )r+   r   methodr   copyr   rm   r   r   r\   r   re   r   r   r   )r   r   r   r   r   updated_companys         r   company_editr    s-   
  J7G~~|| 4'99;D%,%;%;D!" 'dD[dfmZno
 (oo/O9-00"1"@"@,_=BB ((* *  ''
 --/ 	/ #7+Jjj!00??	
   " "r   c                    | j                   j                  d      }|st        ddit        j                        S 	 |j
                  j                  d      rt        j                  |      nt        j                  |      }|j                  t        j                  |      d       }ddd	d
ddd}|j                  |d       g d}|D cg c]  }||j                  vs| }}|r t        dd| it        j                        S t        t         j"                  j%                  dd            }t               }	g }
d}|j'                         D ]  \  }}|j                  d      rt)        |d         j+                         nd}d}|sd}n||	v rd}n||v rd}|	j-                  |       |
j/                  |dz   ||j                  d      |j                  d	      |j                  d
      |j                  d      |j                  d      |d       |sd} t        |
|d      S # t        $ r*}t        dd| it        j                        cY d }~S d }~ww xY wc c}w )NfileerrorNo file uploaded.rd   .csvError reading file: r   r   r   r   r   company_pincodezCompany NameAddressCityr   CountryPincodeTcolumnsinplacer   r   r   r   r   r  Missing columns: flatFr   Company name is requiredzDuplicate company in fileCompany already existsr   )
row_numberr   r   r   r   r   r  r  )rows
has_errors)FILESr   r\   re   r   r   endswithpdread_csv
read_excelwherenotnull	Exceptionrenamer  setr   r   values_listiterrowsstrr   addr   )r   r  dfeCOLUMN_MAPPINGrequiredcolmissingexisting_names
seen_namespreview_datar  idxrowr   r  s                   r   company_preview_importr6    sG    ==V$D"56v?Z?Z[[c"&))"4"4V"<R[["--PTBUXXbjjnd+ '$ $$N IIndI3 zH&@hs#RZZ*?shG@$5gY"?@IdIdee 44^$4OPNJLJKKMS;>77>;Rs3~./557XZ.EZ'/E^+,E|$'("ww'89GGN3 WW_5"ww'89"ww'89	
 		 J3 "6 \DEEq  c$8"<=fFaFabbc$ As*   A*H% 
II%	I.IIIc                    | j                   j                  d      }|st        ddit        j                        S 	 |j
                  j                  d      rt        j                  |      nt        j                  |      }|j                  t        j                  |      d       }ddd	d
ddd}|j                  |d       g d}|D cg c]  }||j                  vs| }}|r t        dd| it        j                        S dg }	}|j                         D ]^  \  }
}	 t!        j"                         5  t%        |d         j'                         }|st)        d      t*        j,                  j/                  |      j1                         rt)        d      	 t2        j,                  j                  |j                  d	            }	 t6        j,                  j                  |j                  d
            }	 t8        j,                  j                  |j                  d            }t*        j,                  j;                  ||j                  d      ||||j                  d             |dz  }d d d        a t        d|t?        |	      |	dt        j@                        S # t        $ r*}t        dd| it        j                        cY d }~S d }~ww xY wc c}w # t2        j4                  $ r t)        d|j                  d	       d      w xY w# t6        j4                  $ r t)        d|j                  d
       d      w xY w# t8        j4                  $ r t)        d|j                  d       d      w xY w# 1 sw Y   xY w# t        $ r;}|	j=                  |
dz   |j                  d      t%        |      d       Y d }~d }~ww xY w)Nr  r  r  rd   r	  r
  r   r   r   r   r   r  r  Tr  r  r  r   r  )r   r  )r   zCity 'z' not foundzState 'z	Country 'r   r   )r  r   r  re   successfully_importedfailed_countfailures)!r  r   r\   re   r   r   r  r  r   r!  r"  r#  r$  r%  r  r(  rZ   atomicr)  r   
ValueErrorr   r   r   existsr   r   r   r   creater   r   r   )r   r  r+  r,  column_mappingr.  r/  r0  r   failedr4  r5  r   city_instancestate_instancecountry_instances                   r   company_importrE  %  s    ==V$D"56v?Z?Z[[c"&))"4"4V"<R[["--PTBUXXbjjnd+ '$ $$N IIndI3 zH&@hs#RZZ*?shG@$5gY"?@IdIdeeVGKKMS&	##%"3~#67==?#$%?@@??))|)DKKM$%=>>T$*NN$6$6CGGN<S$6$TMV%*]]%6%6CGGO<T%6%UNZ'0'8'8'<'<#''J[B\'<']$ &&!-$'GG,=$>!."0$4$'GG,=$> '  1? & "R !(F	
   " "A  c$8"<=fFaFabbc$ A" ** T$vcggn.E-Fk%RSST
 )) V$wsww/G.H%TUUV
 !-- Z$y9J1K0LK%XYYZ) &%@  	MM!Ag # 7Q  	s   A*J% 
KK"N6A#M?/K 
/L:/M
)AM?1N%	K.KKK 2LM?2MM?
2M<<M??N		N	O0OODELETEc                 r   	 t         j                  j                  |      }| j                  |_        |j                  dg       |j                          t        dddd      S # t         j                  $ r t        d	d
dd      cY S t        $ r#}t        d	t        |      dd      cY d }~S d }~ww xY w)Nr   
updated_byupdate_fieldsTzCompany deleted successfullyre   r      rd   FzCompany not found    )r   r   r   r   rH  r   deleter\   r   r$  r)  )r   r   r   r,  s       r   delete_companyrP  x  s    J//%%%, %\\L>2 	44RS\_`` W55HIRUVV J5SV<SIIJs$   A#A& &#B6B6B1+B61B6c                    | j                   j                  d      }| j                   j                  d      }|r|st        dddt        j                        S 	 t
        j                  j                  |      }|j                  |      st        dd	it        j                        S 	 |j                  d u }g d}|j                  |v s|j                  rjt        j                  |      }t        j                  j!                  |      j#                  d      }|D cg c]  }|j$                  r|j$                  j&                  nd |j$                  r|j$                  j(                  nd |j*                  |j,                  |j.                  |j0                  |j2                  d }	}t        ddd|t5        |j6                        t5        |      |j&                  |j                  |j8                  |j:                  |j<                  |j                  |j                  |j                  |	d	dt        j>                        S tA               }
tB        j                  jE                  ||
dtG        jH                         d       tK        |j                  |
       |j&                  | jL                  d<   t        j                  |      }t        j                  j!                  |      j#                  d      }|D cg c]  }|j$                  r|j$                  j&                  nd |j$                  r|j$                  j(                  nd |j*                  |j,                  |j.                  |j0                  |j2                  d }	}t        ddd|t5        |j6                        t5        |      |j&                  |j                  |j8                  |j:                  |j<                  |j                  |j                  |	ddt        j>                        S # t
        j                  $ r  t        dd
it        j                        cY S w xY wc c}w c c}w )NemailpasswordFEmail and password are requiredr   rd   rR  r  Incorrect passwordInvalid email or password)zkush.dave@ammrs.co.inzatul@myvaluetrip.comzshachi@myvaluetrip.comzkunael.aneja@ammrs.co.inzvimlesh.kumhar@ammrs.co.inzkush.fsdfd@yopmail.comr   r   r   	menu_namer   r   r   r   r   Tz#Login successful (OTP not required))	r   rR  r   designationcontactre   is_user_accessis_superuserr   r   r   otp_sentfirst_loginaccessrefreshr   otpis_verified
created_atr   defaultsotp_user_idOTP sent to your emailr   rR  r   r[  r\  re   r]  r   )'r   r   r\   re   r   r   r   rK   HTTP_401_UNAUTHORIZEDr   
last_loginrR  r^  r`   for_userr
   r   r   r   r   rZ  r   r   r   r   r   r)  access_tokenusernamer[  
contact_nor   r;   r   update_or_creater   nowr<   session)r   rR  rS  r   is_first_loginADMIN_BYPASS_EMAILSrc  user_permissionspermpermissions_datare  s              r   custom_loginr{    s    LLW%E||
+H8
 --/ 	/

||e,""8,./33  - __,N zz((D,=,=''- ##VTV"^J' 	 )
 ) 04}}4==++$8<T]]444 MM<< MM"oo"oo ) 	 
 <)'../7|gg#//??++"&"3"3 $ 1 1/

$ $$%& 	&* .C%% ",,.
 &  4::s# &*WWGOOM" ##D)G 				
	#  % %D ,0==t}}''d48MM00t||////	
 %   +%g**+w<''ZZMM++kk"//+	
"   #" "A  
12//
 	

6
ps!   AP BQ8BQ
0QQc                    | j                   j                  d      }| j                   j                  d      }|r|st        dddt        j                        S 	 t
        j                  j                  |      }|j                  |      st        dd	it        j                        S 	 |j                  d u }|t               }t        j                  j                  ||dt        j                         d       t!        |j"                  |       |j$                  | j&                  d<   t)        j*                  |      }t,        j                  j/                  |      j1                  d      }|D cg c]  }|j2                  r|j2                  j$                  nd |j2                  r|j2                  j4                  nd |j6                  |j8                  |j:                  |j<                  |j>                  d }	}t        ddd|tA        |jB                        tA        |      |j$                  |j"                  |jD                  |jF                  |jH                  |j                  |jJ                  |	ddt        jL                        S t        dd
ddt        j                        S # t
        j                  $ r  t        dd
it        j                        cY S w xY wc c}w )NrR  rS  FrT  r   rd   rU  r  rV  rW  rd  rh  rj  rX  r   rY  Trk  rl  r_  )r   r   r`  )'r   r   r\   re   r   r   r   rK   rm  r   rn  r;   r   rs  r   rt  r<   rR  r   ru  r`   ro  r
   r   r   r   rZ  r   r   r   r   r   r)  rp  rq  r[  rr  r^  r   )
r   rR  rS  r   rv  re  rc  rx  ry  rz  s
             r   custom_login_oldr}  "  s    LLW%E||
+H8
 --/ 	/

||e,""8,./33  - __,Nn))$&lln 	* 	
 	tzz3' *.& ''- ##VTV"^J' 	 )
 ) 04}}4==++$8<T]]444 MM<< MM"oo"oo ) 	 
 /)'../7|gg#//??++"&"3"3/

$ $$%& 	&( . ))	+ +C  
12//
 	

@
s   AJ( 2BK(0KKc                 d   | j                   j                  d      }| j                   j                  d      }|r|st        ddit        j                        S 	 t
        j                  j                  |      }|j                  |k(  rs|j                         scd	|_
        |j                          |j                  }t        | |       t        d	d
|j                  |j                  dt        j                         S t        ddid      S # t
        j                  $ r t        ddid      cY S w xY w)Nr   re  r  zUser ID and OTP are requiredrd   )user_idzOTP not found  TzOTP verified successfully)r   r   r  rR  Invalid or expired OTP)r   r   r\   re   r   r   r   r   re  
is_expiredrf  r   r   r.   r   rR  HTTP_202_ACCEPTED)r   r  	otp_inputotp_objr   s        r   
verify_otpr  ~  s    llt$G  'I)"@A&JeJeff@""&&w&7 {{i(:(:(<"||gt2wwZZ	

 **, 	, ":;CHH#    @/23??@s    D
 
"D/.D/c           	         | j                   j                  d      }|st        dddt        j                        S 	 t
        j                  j                  |      }t               }t        j                  j                  ||dt        j                         dd	
      \  }}t        |j                  |       |j                   | j"                  d<   t        ddd|j                   |j                  |j$                  ddt        j&                        S # t
        j                  $ r! t        dddt        j                        cY S w xY w)NrR  FEmail is requiredr   rd   rU  zNo user found with this emailforgot_password)re  purposerg  rf  rh  rj  Trk  )r   rR  r   )r   r   r`  r   )r   r   r\   re   r   r   r   r   HTTP_404_NOT_FOUNDr;   r   rs  r   rt  r=   rR  r   ru  r   r   )r   rR  r   re  r  createds         r   r  r    s=    LLW%E*
 --/ 	/
-||e, .C  ''88(",,. 	
 9 GW TZZ- &*WWGOOM"+''ZZ
		   	" 	"5  -6
 ++- 	--s    D 1EEc                    | j                   j                  d      }| j                  j                  d      xs | j                   j                  d      }|r|st        dddt        j
                        S 	 t        j                  j                  |dd      j                  d	      }|j                  |k(  rq|j                         sad|_        |j                          || j                  d<   | j                  j!                  dd        t        ddddt        j"                        S t        dddt        j
                        S # t        j                  $ r! t        dd
dt        j                        cY S w xY w)Nre  r   FzOTP and user_id are requiredr   rd   r  )r  r  rf  rg  zOTP not found or expiredTreset_user_idrj  z-OTP verified. You can now reset your password)r   r   r   r  )r   r   ru  r\   re   r   r   r   r   latestr   r  re  r  rf  r   popr   )r   re  r  r  s       r   verify_otp_forgot_passr    sp    ,,

5
!Coo!!$'A7<<+;+;D+AGg5
 --/ 	/
-""))%6E * 

&
 	 {{c'"4"4"6" ,3(M40F
 $$	& 	& + ))+ +)    -1
 ++- 	--s   71E 1E:9E:c                    | j                   j                  d      }| j                   j                  d      }|r|st        dddt        j                        S 	 t
        j                  j                  |      }|j                  |       |j                          t        dd	dt        j                        S # t
        j                  $ r! t        dd
dt        j                        cY S w xY w)Nnew_passwordr   Fz%New password and user id are requiredr   rd   r   TzPassword reset successfulzUser not found)r   r   r\   re   r   r   r   set_passwordr   r   r   r  )r   r  r  r   s       r   reset_passwordr  %  s     <<##N3Lllt$Gw>
 --/ 	/
-||7+,'		2
 $$& 	&  -'
 ++- 	--s   AB9 91C-,C-c                    | j                   j                  d      }|st        ddid      S t        t        |      }t
        j                  j                  |      j                  dd	      j                  d
ddddddddd
      }i }	 t        j                  j                  d      }|j                  |j                  |j                  |j                  g d||j                  <   |D ]  }|j                   }|j"                  s1|j$                  s%|j&                  s|j(                  s|j*                  sM|j,                  |j                  |vsh|j                  |j                  |j                  |j                  g |j"                  |j$                  |j&                  |j(                  |j*                  dd||j                  <   |j                   }|j                  |vr=|j                  |j                  |j                  |j                  g d||j                  <   |j                  |j                  |j                  |j"                  |j$                  |j&                  |j(                  |j*                  dd}	||j                     d   j/                  |	        t1        |j3                         d       }
|
D ]  }t1        |d   d       |d<    t        d|
i      S # t        j                  $ r Y w xY w)Nr  r  zuser_id is requiredr  rd   r   rX  r   ref_menu__ref_menur   r   r   r   r   ref_menu__idref_menu__menu_nameref_menu__menu_urlref_menu__menu_order_noref_menu__ref_menu_id	DASHBOARD)menu_action)r   r   r   ordersubmenusr   )r   r   r   r  r  r   )r   r   r   r   r  c                     | d   S )Nr   )ms    r   <lambda>z$assigned_menus_api.<locals>.<lambda>  s    '
r   r   c                     | d   S )Nr   r  )sms    r   r  z$assigned_menus_api.<locals>.<lambda>  s    RXr   menus)r   r   r\   r+   r   r
   r   r   r   onlyr	   r   rZ  menu_urlmenu_order_nor   r   r   r   r   r   r   r   r   sortedvalues)r   r  r   r   r  	dashboardry  menuparentsubmenu_dictsorted_menusr  s               r   assigned_menus_apir  m  s    lly)G"78EETg.D 				
$8	9		:|\13GIbd{

	  ELL$$$=	,,''%%,,
ill" }}$//UYUdUd#wwe#'' NN==!// "$(MM#'<<$(MM&*oo&*oo$"dgg ]]Fyy% ))",,!??#11 "$fii  gg}} $#|| $"&//"&// 	L &))Z(//=Y ^ %,,..BCL q}2EF*  Wl+,,q  s   	AK# #K:9K:c                     t         j                  j                         j                  ddd      }t	        |d      }t        d|j                  dt        j                        S )Nr   r   country_codeTr   r   r   rd   )	r   r   r   r  ro   r\   r   re   r   )r   	countriesr   s      r   get_countriesr    sZ     !!%%',,T6>JI"948J   " "r   c                 B   | j                   j                  d      }|st        ddit        j                        S t
        j                  j                  |      j                  ddd      }t        |d	      }t        d|j                  d
t        j                        S )N
country_idr  zcountry_id is requiredrd   )r  r   r   Tr   r  )query_paramsr   r\   re   r   r   r   r   r  rp   r   r   )r   r  statesr   s       r   
get_statesr  6  s     %%)),7J":;FD_D_``]]!!Z!8==dFLYF d3J ! !r   c                    | j                   j                  d      }|st        dddt        j                        S 	 t        |      }t        j                  j                  |      j                  dd	d      }t        |d
      }t        d
|j                  dt        j                        S # t        t        f$ r! t        dddt        j                        cY S w xY w)Nstate_idFzstate_id is requiredr   r  rd   z"Invalid state_id, must be a number)r  r   r   Tr   r  )r  r   r\   re   r   intr=  	TypeErrorr   r   r   r  rq   r   r   )r   r  citiesr   s       r   
get_citiesr  E  s     ##''
3H(>?..
 	

x= ^^""H"5::4TFT2J*//2!!  	" 
(LM..
 	

s   B. .-CCc                     t        i       S Nr[   r   s    r   r  r  _  s      
  r   c           	          | j                         }t               }|D ]+  }t               }|D ]  }|t        di | d|iz  } ||z  }- |S )z
    Splits query_string into words and builds a Q object:
    - All words must match somewhere (AND)
    - Within each word, it can match in any field (OR)
    __icontainsr  )splitr8   )query_stringfieldswordsq_objectwordword_qr   s          r   build_multiword_queryr  u  sc      EsHEa8eWK0$788F F	 
 Or   c                 2   | j                   dk7  rt        ddd      S | j                  j                  dd      j	                         }t        |      dk  rt        dddt        j                  	      S g g g g g g g g d
}g d}t        j                  j                  t        ||            j                         }|D ]{  }|j                  xs d d|j                  xs d d|j                  xs d j	                         }|d   j!                  |j"                  ||j$                  |j&                  d       } g d}t(        j                  j                  t        ||            j                         }|D ]  }	|d   j!                  |	j*                  |	j,                  |	j.                  |	j0                  r\|	j0                  j"                  |	j0                  j                  xs d d|	j0                  j                  xs d j	                         dnd d        g d}
t2        j                  j                  t        ||
            j                         }|D ]  }|d   j!                  |j*                  |j4                  |j6                  rd|j6                  j8                  ind |j:                  |j<                  |j0                  r\|j0                  j"                  |j0                  j                  xs d d|j0                  j                  xs d j	                         dnd d        g d}t>        j                  j                  t        ||            j                         }|D ]  }|d   j!                  |j*                  |j@                  |jB                  |j0                  r\|j0                  j"                  |j0                  j                  xs d d|j0                  j                  xs d j	                         dnd d        g d}tD        j                  j                  t        ||            j                         }|D ]  }|d   j!                  |jF                  rd|jF                  jH                  xs dind |jJ                  |jL                  |j0                  r\|j0                  j"                  |j0                  j                  xs d d|j0                  j                  xs d j	                         dnd d        g d}tN        j                  j                  t        ||            j                         }|D ]  }|d    j!                  |jP                  rd|jP                  jR                  xs dind |jT                  |j0                  r\|j0                  j"                  |j0                  j                  xs d d|j0                  j                  xs d j	                         dnd d!        d"d#g}tV        j                  j                  t        ||            j                         }|D ]  }|d$   j!                  |jX                  |j0                  r\|j0                  j"                  |j0                  j                  xs d d|j0                  j                  xs d j	                         dnd d%        g d&}tZ        j                  j                  t        ||            j                         }|D ]8  }|d'   j!                  |j*                  |jH                  |j\                  d(       : t_        |ja                               st        dd)|d*t        jb                  	      S t        d+|d,t        jd                  	      S )-Nr   FInvalid request method.rK  searchr   r   z#Please enter at least 3 characters.rd   )clientsr   	passportsvisas	insuranceassoc_company
freq_flyer	documents)client_first_nameclient_middle_nameclient_last_namerR  rr  client_coderesidential_addressresidential_city__nameresidential_state__nameresidential_country__namedobgenderanniversary_datereference_frompreferred_contact_method
aadhaar_nopan_noref_preferred_airline__airlineseat_preferenceseat_preference_othermeal_preferencefare_preferencestar_ratingstay_preferenceroom_preferenceextra_amenities r  )r   r   rR  rr  )passport_nopassport_expiry_dateref_client__client_idr  r   r   )r   r  r  
ref_client)	visa_typevisa_from_datevisa_to_dater  ref_visa_country__namer  r   )r   r  visa_countryr  r  r  )insurance_from_dateinsurance_to_dater  r  -)r   r  r   r  )ref_company__company_namer[  primary_companyr  r  r   )ref_companyr  r[  r  )ref_airline__airliner  ff_nor  )ref_airliner  r  other_document_namer  r  )r  r  )r   r   r   company_city__namecompany_state__namecompany_country__nameaccount_concerned_persontravel_concerned_personr   r   r   r   zNo records found.)re   r   r   T)re   r   )3r  r4   r   r   r   r   re   r   r   r   r   r  distinctr  r  r  r   	client_idrR  rr  r   r   r  r  r  r   r  ref_visa_countryr   r  r  r   r  r   r   r  r   r  r[  r   r  airliner  r   r  r   r   anyr  r  r   )r   queryresultsclient_fieldsr  c	full_namepassport_fieldsr  pvisas_fieldsr  v
ins_fieldsr  insassoc_fieldsr  assoc	ff_fieldsr  ffdocs_fieldsr  docscompany_fieldsr   comps                               r   search_recordsr'    s    ~~u9RSTTKKOOHb)//1E
5zA~)NO..
 	

 2BZ\oq r3G	M nn##$9%$OPYY[G**0b113G3G3M22NaPQPbPbPhfhOijppr		!!++WW,,	#
 	  WO&&--.CE?.[\eegI##$$==$%$:$:  ll,,<<99?R@!,,B_B_BeceAfgmmo $(%
 	  vL%%&;E<&PQZZ\E$$ ## 1--22)-..NN  ll,,<<99?R@!,,B_B_BeceAfgmmo $(!
 	 " WJ%--445J5R\5]^ggiI##&&#&#:#:!$!6!6  nn..>>;;ArB!CNNDcDcDigiCjkqqs &*%
 	  lL&..556KES_6`ajjlM '' "" ))66<" )-$44 ,, !! &&00 ++==CDAeFVFVFgFgFmkmEnouuw (,)
 	  KI$,,334I%QZ4[\eegJ$$  ..4" &*XX  mm--==::@bA2==CaCaCgegBhiooq %)
&
 
	  )*ABK&&--.CE;.WXaacI###'#;#;  oo//??<<BC1T__EeEeEkikDlmssu '+%
 	 N &&'<UN'ST]]_I##''%%kk%
 	  w~~ )<gN,,
 	

 49&BTBTUUr   c                 B   | j                   j                  dd      }d }|r%|j                  d      r|j                  d      d   }d}t	        | j
                  |      }| j                  j                  dd      j                         }t        j                  j                         }|rB|j                  t        |      t        |	      z  t        |
      z  t        |      z        }|j                  d      j                         }|j                  d      j                         }g }	t        |d      D ]j  \  }
}|	j                  |j                   |j"                  t%        |dd      t%        |dd      |j&                  |j(                  |j*                  rdndd       l t-        d|j                         |j                         |	|||r:|j.                  |j0                  |j2                  |j4                  |j6                  dni dt8        j:                        S )NHTTP_AUTHORIZATIONr   zBearer r  r   r   zsearch[value])username__icontainsemail__icontainscontact_no__icontains)designation__icontainsTr   Fstartr[  rr  r   r   )r   rq  r[  rr  rR  r^  re   r   )r   r   r   r   r   r   r   rd   )METAr   r   r  r   r   r   r   r   r   r   r   r8   r   	enumerater   r   rq  getattrrR  r^  r   r\   r   r   r   r   r   re   r   )r   auth_headertokenr   r   r   usersr   r   r   r   r   s               r   	user_listr9    s    ,,""#7<KE{--i8!!#&q) G w7E++///26<<>KLLE+.{+,K01 [12
 <<$</557L\\E\288:ND a0t''"4;!$b9ZZ --"&..hj
 	 1  ;;="  }}****
    " "r   )	QueryDictc                    t        t        |      }g d}| j                  dk(  r|j                  |j                  |j
                  |j                  xs d|j                  xs d|j                  |j                  d}g }t        j                  j                  |      D ]o  }|j                  |j                  |j                  |j                   |j"                  |j$                  dt'        fd|D              d	<   |j)                         q t+        d
||dt        j,                        S | j                  dk(  r%t/        | j0                  |      }|j3                         s't+        d|j4                  it        j6                        S |j9                  d      }| j:                  |_        d| j0                  v rt?        | j0                  d         jA                         dk(  rd|_        d
|_!        ngt?        | j0                  d         jA                         dk(  rd|_        d|_!        n/t+        dd| j0                  d    ddt        j6                        S |j9                          i }d| j0                  v rtE        | j0                  d   tF              r| j0                  d   D ]s  }	t?        |	jI                  d            }
|
s |	jI                  d	d      r|D ci c]  }|d
 c}||
<   G|D ci c]  }|tK        |	jI                  |d              c}||
<   u n| j0                  jM                         D ]k  \  }}|jO                  d      s	 |jQ                  d      \  }}
}||vr3|
|vr|D ci c]  }|d c}||
<   t?        |      jA                         dv ||
   |<   m |jM                         D ]  \  }
}t        j                  jU                  ||
|jM                         D ci c]  \  }}d| | c}}      \  }}|rS|jM                         D ]  \  }}tW        |d| |        |j9                           g }t        j                  j                  |      D ]o  }|j                  |j                  |j                  |j                   |j"                  |j$                  dt'        fd|D              d	<   |j)                         q t+        d
d |j                   d!|j                  |j                  |j
                  |j                  xs d|j                  xs d|j                  xs |jB                  rd"nd#d$|d%t        j,                        S y c c}w c c}w # tR        $ r Y Aw xY wc c}w c c}}w )&Nr   viewr*  editrO  exportr   r   )r   rq  rR  r[  rr  re   r^  rX  )r   r=  r*  r>  rO  r?  c              3   (   K   | ]	  }|     y wr  r  .0a	perm_dicts     r   	<genexpr>zupdate_user.<locals>.<genexpr>5       "AA9Q<   r   T)r   r   r   rd   r   )r   r   Fcommitre   r   r   zInvalid status 'z'. Allowed: active, inactiver  r   r   menu__)1trueyescan_)r   r   ri  c              3   (   K   | ]	  }|     y wr  r  rA  s     r   rE  zupdate_user.<locals>.<genexpr>  rF  rG  User 'z' updated successfully.r   r   )r   rq  rR  rr  r[  re   )r   r   r   r   ),r+   r   r  r   rq  rR  r[  rr  re   r^  r
   r   r   r   r   r   r   r   r   r   r   r\   r   r   r   r   r   r   r   r   rH  r)  lowerr   
isinstancelistr   boolr   r   r  r=  get_or_createsetattr)r   r  r   actions	user_datar   upformpermissions_dictry  r   rC  r   r   rK  action	new_permsvalobjr  existing_permsrD  s                        @r   update_userrb    s/    Tg.D9G ~~''ZZ++1r///Rkk --
	 !))00$0?B>>zz----I  #"A"AAIey) @ &
 $$	& 	& 
5	 gllT:}}Xt{{3F<W<WXX yyy& ",, w||#7<<)*002h>&!%W\\(+,224
B(!&$/X0F/GGcd! !557 7
 			  GLL(Z]8SUY-Z]3dhhy1288E5)BI0J'QD'0J$W-V]0^V]QRD!U9K4L1LV]0^$W- 4 &ll002
U>>'*!-0YYs^*7F W, &66GN4Ow!QXw4O(19<U9I9I9KOc9c$W-f5 3 #3"8"8":GY*22@@#8A8IJ8IfaD*c/8IJ A LC
 #,??#4KFCC4x#6 $5
 #; !))00$0?B>>zz----I  #"A"AAIe!!), @ .EFgg MM"oo3#//52++Udnn(* *
 $$& 	&e 
!J 1K0^ & ! !
 5P Ks*   "
U(7#U-U28
V/V2	U?>U?c                 |  
 g d}| j                   j                  dk7  rt        ddit        j                        S | j
                  }t        |      }|j                         r|j                  d      }| j                   |_	        t        j                  t        j                  z   
d	j                  
fd
t        d      D              }|j                  |       t!        |d      rd|_        |j                          t%        dd|j&                   d| dd|j(                  gd       |j+                  dg       }g }|D ]  }|j+                  d      }	|	s|j-                  t/        ||	|j+                  dd      |j+                  dd      |j+                  dd      |j+                  dd      |j+                  dd                    |rt.        j0                  j3                  |       t        dd|j&                   ddt        j4                        S t        |j6                  t        j8                        S )Nr<  Tr  z!Only admins can create the users.rd   )r   FrH  r   c              3   H   K   | ]  }t        j                          y wr  )secretschoice)rB  rK  
characterss     r   rE  zcreate_user.<locals>.<genexpr>  s     "Px!7>>*#=xs   "   ra  z)My Value Trip! | Account Has Been CreatedzHello zW,

Welcome to My Value Trip!

Your account has been created.
Your default password is: z4

Please login and change your password immediately.zno-reply@myvaluetrip.com)subjectr   
from_emailrecipient_listfail_silentlyr   r   r=  r*  r>  rO  r?  )r   r   r   r   r   r   r   rQ  z' created successfullyr   )r   r^  r\   re   HTTP_403_FORBIDDENr   r   r   r   
created_bystringascii_lettersdigitsjoinranger  hasattrra  rG   rq  rR  r   r   r
   r   bulk_creater   r   r   )r   rX  r   r   r   default_passwordrz  upsry  r   rg  s             @r   create_userrx    s    :G||  D("EFvOhOhii<<DT*Je, ",, ))FMM9
77"PuQx"PP*+4'#D		" 	? (- .>,> ?EF 2 JJ<	
"  88M26$Dhhy)GJJ#&%0.&%088He488He4 	 % ##//4#DMM?2HI --	/ 	/ J%%f.I.IJJr   c                    t        t        |      }| j                  dk(  r| j                  j	                  d|j
                        |_        | j                  j	                  d|j                        |_        | j                  j	                  d|j                        |_        | j                  j	                  d      }| j                  j	                  d      }| j                  j	                  d      }|s|s|r|r|r|st        d	d
dt        j                        S |j                  |      st        d	ddt        j                        S ||k7  rt        d	ddt        j                        S |j                  |       |j                          t        | |       t        dddt        j                        S |j                          t        dddt        j                        S d|j                   |j
                  |j"                  |j                  |j                  dd}t        |t        j                        S )Nr   r   	user_namerr  r[  old_passwordr  confirm_passwordFz!All password fields are required.r   rd   zOld password is incorrect.z/New password and confirm password do not match.TzPassword updated successfully.zProfile updated successfully.)r   rq  rR  r[  rr  )r   r   )r+   r   r  r   r   rq  rr  r[  r\   re   r   rK   r  r   rJ   r   r   rR  )r   r  r   r{  r  r|  r   s          r   user_profile_viewr}  A  s    Tg.D~~((dmmD!,,**<I"<<++M4;K;KL||''7||''7"<<++,>? <+;|;KE>a bkq  lG  lG  H  H&&|4E>Z [djdd  A  A//E>o py  zU  zU  V  Vl+IIK %Wd39YZcicucuvv		D5TU^d^p^pqq ''ZZ++//
	G GF$6$677r   c                     t        t        |      }| j                  j                  d      }|j	                  |      rt        dd      S t        dd      S )Nr   r{  TF)safe)r+   r   r   r   rK   r4   )r   r  r   r{  s       r   password_validater  s  sJ    Tg.D<<##N3L<(Du--E**r   c                     | j                   dv rOt        t        |      }|j                  }|j	                          t        dd| ddt        j                        S t        dd	d
t        j                        S )N)r   rF  r   TrQ  z
' deleted.r   rd   Fr  r  )	r  r+   r   rq  rO  r4   re   r   r   )r   r  r   rq  s       r   delete_userr    so     ~~++ '2== 	 6(:9VW`f`r`rss8QR[a[v[vwwr   c                 F   | j                   j                  d      }|st        dddt        j                        S 	 t        |      }|j                          t        dddt        j                        S # t        $ r! t        dddt        j                        cY S w xY w)	Nrc  FzRefresh token is required.rK  rd   TzLogged out successfully.z!Invalid or expired refresh token.)	r   r   r\   re   r   r`   	blacklistHTTP_205_RESET_CONTENTra   )r   refresh_tokenr7  s      r   logout_viewr    s     LL$$Y/M)EF..
 	

]+(BC00
 	
  
)LM..
 	

s   8A6 6'B B c                 p   | j                   j                  dd      j                         }|st        dg i      S t        j
                  j                  t        |      t        |      z  t        |      z  t        |      z  t        |      z  t        |	      z        j                         }g }t        |d
      D ]  \  }}|j                  ||j                  xs d|j                   d|j                  xs d d|j                  xs d j                         |j                  xs d|j                   xs d|j"                  r|j"                  j$                  nd|j&                  xs d|j(                  r|j(                  j+                  d      nd|j,                  d	        t        d|i      S )Nqr   r  )client_first_name__icontains)client_middle_name__icontains)client_last_name__icontainsr+  r-  )!residential_city__name__icontainsr   r1  r  %d-%m-%Y)	r   r  r  rr  rR  residential_citytyperg  client_status)r   r   r   r4   r   r   r   r8   r  r4  r   r  r  r  r  rr  rR  r  r   client_typerg  strftimer  )r   r  r  r   iclients         r   client_searchr  
	  s    KKOOC$**,EYO,,nn##	u-	.	/	e,	- 	
5!	" 	
&		'
 	
E2	3	 hj  Dwa0	6!--3"445Qv7P7P7VTV6WWXY_YpYpYvtvXwx~~  A ++1r\\'R@F@W@W 7 7 < <]_&&,"DJDUDU&++44Z@[]#11
 	 18 D)**r   c                 
   d}t        | j                  |      }t        j                  j	                  d      j                  d      j                  d      }g }|D ]  }|j                  xs d |j                  xs d d|j                  xs d j                         }|j                  }	 |j                         }g }	|j                  j                         D ]p  }
|	j!                  |
j"                  r|
j"                  j$                  nd |
j"                  r|
j"                  j&                  nd |
j(                  |
j*                  d       r |j,                  |j.                  xs d||j0                  xs d|j2                  |j4                  xs d|j6                  rt9        |j6                        nd|	|j:                  xs d|j<                  r|j<                  j?                  d	      nd|||j@                  g d
}t        j                  j	                  |j,                        j                  d      j                  d      }|D ]  j                  xs d dj                  xs d dj                  xs d j                         }g }j                  j                         D ]p  }
|j!                  |
j"                  r|
j"                  j$                  nd |
j"                  r|
j"                  j&                  nd |
j(                  |
j*                  d       r |d   j!                  j,                  j.                  xs d|j0                  xs dj4                  xs dj6                  rt9        j6                        nd|jB                  jD                  j:                  xs dj<                  rj<                  j?                  d	      ndj                   tG        dfd             j@                  d        |j!                  |        t        j                  j	                  d      jI                         }t        j                  j	                  d      jI                         }t        j                  jI                         }tK        d|||||r:|jL                  |jN                  |jP                  |jR                  |jT                  dni dtV        jX                        S # t        $ r |}Y Bw xY w)N   T)ref_client__isnullr  client_companies__ref_companyr   r  )r   r   r[  r  r  )r   r  r  rr  is_prepaymentrR  r  r   r  rg  r  status_labelr   family_membersr  r  get_client_status_displayc                       j                   S r  r  )fams   r   r  zclient_list.<locals>.<lambda>
  s    RURcRcr   )r   r  r  rr  rR  r  r   relationcrossRelationr  rg  r  r  r   r   r0  r   r   )r   r   r   r   total_clientsr   rd   )-r   r   r   r   r   r   prefetch_relatedr  r  r  r   r  r  AttributeErrorclient_companiesr   r   r  r   r   r[  r  r  r  rr  r  rR  r  r)  r  rg  r  r   r  crossrelationr5  r   r\   r   r   r   r   r   re   r   )r   r   r   primary_clientsr   r  r  actual_statusr  r   r   client_datar  fam_namefam_companiesr   r   total_countr  s                     @r   client_listr  	  s}    G w7E nn++t+D	*	+		9	:  D!//526v7P7P7VTV6WWXY_YpYpYvtvXwx~~  A	,,	)!;;=L
 	,,002E6;6G6Ge//22TBGBSBS 1 1 > >Y]$00#(#8#8	  3 ""!--3" ++1r#11\\'R@F@W@WF$;$; <]_"&&,"DJDUDU&++44Z@[]*()) 
&  ..&:J:J.K^./=> 	 "C//526a8N8N8TRT7UUVWZWkWkWqoqVrsyy{HM--113$$:?:K:K%"3"3"6"6QUFKFWFWE$5$5$B$B]a#(#4#4','<'<	&  4 ()00mm"4"%!nn2bADAUAUC(<(<$=[]*LL!$!2!2-2EH^^cnn55jAY[!$!2!2 d-HJc d f ]]2  "8 	K M "R >>((1(5;;=L^^**Q*7==?N..&&(K"$  }}****
    " "O  	)(L	)s   .S22T Tc                 
   t        j                  j                  dd      j                  d j	                  |      j                         }|st        t         |      }i d|j                  d|j                   d|j                   j                         d	|j                  d
|j                  r&d|j                  j                   d|j                   ndd|j                  d|j                  d|j                   d|j"                  d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  d|j.                  d|j0                  d|j2                  d|j4                  r;|j7                         j9                  d      D cg c]  }|j                          c}ng |j:                  |j<                  r|j<                  j>                  nd |j@                  |jB                  r|jB                  j>                  nd |jD                  r-|jD                  jF                  |jD                  jH                  dnd |jJ                  |jL                  |jN                  |jP                  |jR                  |jT                  |jV                  |jX                  |jZ                  d}t\        j                  j                  d      j                  dd d!d"d#      j	                  |$      }|D cg c]u  }|jF                  |j^                  |j`                  |jb                  rB|jb                  jF                  |jb                  jd                  |jb                  jf                  d%nd d&w c}|d'<   ti        tj        j                  j	                  |$      jm                               |d(<   tn        j                  j                  d)      j                  dd*d+d,      j	                  |$      }|D cg c]U  }|jF                  |jp                  |jr                  r-|jr                  jF                  |jr                  jH                  dnd d-W c}|d.<   ti        t         j                  j	                  |j                  $      jm                               |d/<   ti        tt        j                  j	                  |$      jm                               |d0<   ti        tv        j                  j	                  |$      jm                               |d1<   ti        tx        j                  j	                  |$      jm                               |d2<   t{        d3|d4t|        j~                  5      S c c}w c c}w c c}w )6Nr  ref_preferred_airline)"r  r  r  r  country_code__country_coderr  r  r  rR  r  r  r  marital_statusr  reference_idreference_remarkr  
occupationr  r  aadhaar_card_filer  pan_card_filer  r  r  r  r  r  r  r   r  ref_preferred_airline__idr  r  pkr  client_namer  r  full_contact_no+z - r   r  r  rR  dateOfBirthr  r  r  r  r  r  ResidentialAddressr  r  ,r  )r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r   r[  r  ref_company__idr  ref_client_idr  )r   r[  r  r   companies_datapassport_datar  r  ref_airline__idr  )r   r  r  
flyer_datafamily_dataholding_visatravel_insuranceclients_documentsT)r   r  rd   )@r   r   r   r  r   firstr+   r  r  r  r   r  rr  r  r  r  rR  r  r  r  r  r  r  r  r  r  r  $get_preferred_contact_method_displayr  r  r  r   r  r  r  r   r  r  r  r  r  r  r  r  r   r  r   r[  r  r  r   r   rT  r   r  r   r  r  r   r   r   r\   re   r   )	r   r  r  r  r  r   r  flyersfs	            r   client_viewr  
  sR    		(?	@		
 
)	$	# ( "6i8-V%%-&2231V5L5L4MNTTV- 	v))- 	[a[l[lQv22??@FDUDUCVWrt	-
 	--- 	v))- 	- 	vzz- 	&--- 	F33- 	&//- 	&//- 	++-& 	F33'-( 	f88)-* 	f''+-. 	#,,  &JJLRRSVW%
W!AGGIW%
243-4 ''=C=U=UV5599[_--5;5I5I--11t )) ..110088"
 04))!11!11!11!11!11!11%%--U-Kb 	""		&	dM#46GId	e	f	%	   % a $$== 00
  mm&&22--.. %)		
 %K ! $(%%F%;BBD$K  	##		&	dG.0F	G	f	%	  	! a $$WW  mm&&-- %)	
 	!K "&F,<,<=DDF"K
 #'!!!7>>@#K
 '+%%,,6,BIIK'K"#
 (,%%F%;BBD(K#$ "   " "q%
>%4	!s   "U0A:U5 AU:c                 d   	 t         j                  j                         j                  ddd      j	                  d      }t        |d      }t        d|j                  dt        j                        S # t        $ r1}t        dt        |      d	t        j                        cY d }~S d }~ww xY w)
Nr   r  iataTr   r  rd   Fr   )r   r   r   r  order_byru   r\   r   re   r   r$  r)  HTTP_500_INTERNAL_SERVER_ERROR)r   airlinesr   r,  s       r   airlines_listr    s    9##'')..tYGPPQZ['t<
OO
 $$& 	&  9!f
 779 	99s   A2A5 5	B/>&B*$B/*B/c                    t        | t              rt        d | j                         D              r9t	        | j                         t
              D cg c]  }t        | |          c}S | j                         D ci c]  \  }}|t        |       c}}S t        | t              r| D cg c]  }t        |       c}S | S c c}w c c}}w c c}w )Nc              3   <   K   | ]  }|j                           y wr  )isdigit)rB  ks     r   rE  z1convert_numeric_dicts_to_lists.<locals>.<genexpr>  s     /Jqqyy{Js   r  )	rS  dictr   keysr  r  convert_numeric_dicts_to_listsr   rT  )r`  r  r  s      r   r  r    s    #t/CHHJ//DJ388:[^D_`D_q23q6:D_``EHYY[Q[TQA5a88[QQ	C	;>?3a.q13??
 aQ?s   C=C+Cc                     i }| j                         D ]H  \  }}|j                  dd      j                  d      }|}|d d D ]  }||vri ||<   ||   } |||d   <   J t        |      S )Nr   r   r   )r   r   r  r  )r   resultr   r   partsdr  s          r   parse_nested_formdatar    s    Fjjl
UC$**3/sAz!!A  %) # *&11r   c                    |xs g }t        | t              ri }| j                         D ]n  \  }}||v rVt        |t              rt        ||      g||<   +t        |t              r|D cg c]  }t        ||       c}||<   Y|g||<   `t        ||      ||<   p |S t        | t              rPt        |       dk(  r(t        | d   t        t        f      st        | d   |      S | D cg c]  }t        ||       c}S | dk(  rdS | S c c}w c c}w )z
    - Convert empty strings to None
    - Flatten single-element lists into scalars
    - Keep lists for skip_keys (nested many=True fields)
    r   r   r   N)rS  r  r   normalize_formdatarT  r   )r`  	skip_keysnew_dictr  r  xs         r   r  r    s    RI#tIIKDAqI~a&#5a#C"DHQK4(MN"OQ#5a#CQ"OHQK#$#HQK0I>   	C	s8q=CFT4L!A%c!fi88>ABc&q)4cBB byt)c) #P Cs   (D&D
c           	      
   t        | t              r5| j                         D ci c]  \  }}|ddg i fvr|t        |       c}}S t        | t              r"| D cg c]  }|ddg i fvst        |       c}S | S c c}}w c c}w )z?
    Recursively remove keys with None, "", [], {} values.
    Nr   )rS  r  r   
deep_cleanrT  )r`  r  r  r  s       r   r  r    s     #t 		
#1r2r** z!}#
 	

 
C	'*Js!ab"b7I.I
1sJJ

 Ks   A:B (B )	client_passportclient_visar  r  client_documentsclient_frequent_flyersr  fam_passportsrelationsWithOthersc                    t        i | j                  | j                        }t        |t              }t        |      }t        |d| i      }|j                         ra|j                  | j                        }|j                          t        dt        |d| i      j                  dt        j                        S t        d	|j                  d
t        j                        S )Nr  r   )r   r   rn  Tr   r  rd   Fr   )r  r   r  r  	SKIP_KEYSr  rt   r   r   r   refresh_from_dbr\   re   r   r   r   )r   normalized_datar   r  s       r   client_creater    s    
 ,,Mw||,Mw}},MNO(INO 1O &G$J GLL9 ()W9MNSS
 ))+ 	+
 ## ))+ +r   c                 4   	 t         j                  j                  |      }i d|j                  d|j                  d|j                  d	|j                  d
|j                  d|j                  d|j                  d|j                  r-|j                  j                  |j                  j                  dndd|j                   d|j"                  d|j$                  d|j&                  d|j(                  d|j*                  d|j,                  d|j.                  d|j0                  i d|j2                  d|j4                  d|j6                  r|j9                         j;                  d      ng d|j<                  d|j>                  r|j>                  j@                  ndd|jB                  d |jD                  r|jD                  j@                  ndd!|jF                  r-|jF                  jH                  |jF                  jJ                  d"ndd#|j(                  d$|jL                  r-|jL                  jH                  |jL                  j                  d"ndd%|jN                  r-|jN                  jH                  |jN                  j                  d"ndd&|jP                  r-|jP                  jH                  |jP                  j                  d"ndd'|jR                  d!|jF                  r-|jF                  jH                  |jF                  jJ                  d"ndd(|jT                  d)|jV                  d*|jX                  |jZ                  |j\                  |j^                  |j`                  |jb                  d+}td        j                  jg                  |,      D cg c]^  }|jH                  |jh                  j                  |jj                  |jl                  r|jl                  j@                  nd|jn                  d-` c}|d.<   tp        j                  jg                  |,      D cg c]  }|jH                  |jh                  j                  |jr                  r|jr                  jH                  nd|jt                  |jv                  r|jv                  j@                  nd|jx                  |jz                  d/ c}|d0<   t|        j                  jg                  |,      D cg c]^  }|jH                  |jh                  j                  |j~                  r|j~                  j@                  nd|j                  |j                  d1` c}|d2<   t        j                  jg                  |,      D cg c]S  }|jH                  |jh                  j                  |j                  |j                  r|j                  j@                  ndd3U c}|d4<   t        j                  jg                  |,      D cg c]S  }|jH                  |jh                  j                  |j                  r|j                  jH                  nd|j                  d5U c}|d6<   t        j                  jg                  |,      D 	cg c]u  }	|	jH                  |	jh                  j                  |	j                  r-|	j                  jH                  |	j                  j                  d7nd|	j                  |	j                  d8w c}	|d9<   t         j                  jg                  |:      }
g |d;<   |
D ]  }|j                  |j                   d<|j                   |j<                  |j>                  r%| j                  |j>                  j@                        nd|jB                  |jD                  r%| j                  |jD                  j@                        nd|j                  |j                  |j                  |j"                  |j$                  |j&                  |j                   d=}|d;   j                  |       	 t	        d>|d?t
        j                        S # t         j                  $ r! t	        dddt
        j                        cY S w xY wc c}w c c}w c c}w c c}w c c}w c c}	w )@z
    Fetch single client with related passports, visas, travel insurance,
    companies, documents, frequent flyers, and family member data,
    including file URLs.
    r  FClient not foundr   rd   r  r  client_salutationr  r  r  r  r  )countrycoder   Nrr  rR  r  r  r  r  r  r  r  r  r  r  , r  r  r  r  r  r  r  residential_countryresidential_stater  residential_pincoder  r  r  )r  r  r  r  r  r  )r   r  r  passport_filer  r  )r   r  r  r  passport_size_photographr  r  r  )r   r  insurance_documentr  r   r  )r   r  r  other_documentr  )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  rR  r  r  rr  Tr  )Pr   r   r   r   r\   re   r  r  r  r  r  r  r  r  r  r   rr  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  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  r   r  r   r[  r  build_absolute_urir   r   )r   r  r  r  r  r  tcdr"  rC  r  r  fam_datas                r   client_detailr    s   -##y#1GV%%Gv))G 	V55G 	V55	G
 	F33G 	f77G 	--G 	    "..;;'',,
 '+G 	f''G 	G 	vzzG 	&--G  	f88!G" 	f''#G$ 	F33%G& 	&//'G( 	++)G* 	F33+G, 	&//-G. 	#ag  bA  bAF$O$O$Q$W$WX\$]  GI/G8 	f''9G: 	V=U=UV5599[_;G> 	&--?G@ 	V5I5I--11tAGD 	  )) ..110088"
 04KGN 	v99OGP 	 '' ,,//..33 
 .2WGZ 	 %% **--,,11
 ,0aGd 	 $$ )),,++00
 +/kGn 	v99oGr 	  )) ..110088"
 04yG~ 	v))G@ 	611AGB 	 !=!=CGD "11!11!11!11!11MGKd  ''..Y.G	& HA $$\\33==45OOQ__00$%$:$:	
 H	&K!"* ##***C" DA $$\\339:9K9K 2 2 5 5QUJKJdJd(B(B(F(Fjn..NN	
 D"K* '..55I5N	' OA $$\\33>?>R>R!"6"6":":X\#$#8#8!"!4!4	
 O	'K"#$ !((//i/H' IB %%]]44#%#9#9797H7Hb//33d		
 I'K"#" &--4494M- NB %%]]44022>>,,DXX		
 N-K()* $++222K' LA $$\\33  mm&& ! : : %)== 00		
 L'K"# ^^**f*=N$&K !--,,-Qs/C/C.DE..Z]ZoZo!;!;C<Q<Q<U<U!VuyjjRURcRcW778I8I8M8MNim!$!6!6 # 4 4"%"8"8YY77jj..
 	$%,,X6! $    " "W  -)
 ++- 	--b	&"	''-'s;    a 'A#a<2Bb+A#b6Ab6Ab6A:b1a98a9c           	         	 t         j                  j                  |      }t        i | j                  | j                        }t        |t              }t        |      }t        ||dd| i	      }|j                         rb|j                  | j                   
      }|j#                          t	        ddt        |d| i      j                  dt
        j$                        S t	        d|j&                  dt
        j(                        S # t         j                  $ r! t	        dddt
        j                        cY S w xY w)Nr  Fr  r   rd   r  Tr   )r   r   r   )rH  zClient updated successfullyr   r   r   )r   r   r   r   r\   re   r  r  r   r  r  r  r  rt   r   r   r   r  r   r   r   )r   r  r  r  r   s        r   client_updater    s9   
-##y#1 ,,Mw||,Mw}},MNO(INO 1O%G$	J GLL9 4()W9MNSS
 $$	& 	& ## ))+ +5  -)
 ++- 	--s    D 1E ?E )defaultdictc                 Z   t        t              }| j                         D ]  \  }}|j                  d      s|j	                  d      }t        |d   dd       }t        |      dk(  r|d   dd }|||   |<   Yt        |      dk(  sht        |d   dd       }|d	   dd }d
||   vrg ||   d
<   t        ||   d
         |k  r,||   d
   j                  i        t        ||   d
         |k  r,|dv rd}n|dv rd}n|dv rd}|||   d
   |   |<    t        |j                               S )z
    Convert form-data like family_members[0][field]
    into proper list of dicts for serializer.
    Handles nested passports properly.
    r  r   r   Nr  r   r      r  r  )
passportNor  r  )r  expiryr  )passportFiler  r  )
r  r  r   r   r  r  r   r   rT  r  )	r   r  r   r   r  	fam_indexr   passport_index	sub_fields	            r   normalize_family_membersr  5  sp    d#Kjjl
U>>*+IIcNEE!HSbM*I 5zQa"05I&u- Uq!$U1Xcr]!3!!HSbM	$K	,BB@BK	*+<=+i01BCDV	*+<=DDRH +i01BCDV  == -I"DD 6I"CC /IW\I&'89.I)T= #@ ""$%%r   c                    t        t        |d      }| j                  dk(  r5t        dt	        |d| i      j
                  dt        j                        S | j                  d	k(  r| j                  j                         }d
D ]   }| j                  j                  |      ||<   " t        |      }t        |d| || j                  d      }|j                         r]|j!                  | j                        }t        |d|j"                        }t        dd|j
                  dt        j$                        S t        d|j&                  dt        j(                        S y )NzPrimary Member)r  r  r   Tr   r   )r   primary_memberrd   r   )r  r  )r   primary_clientrn  r   r  r   z#Family member(s) added successfullyr   Fr   )r+   r   r  r\   rt   r   re   r   r   r  r  r   r  rv   r   r   r   r   r   r   r   )	r   r  r  combined_datar   family_members_datar   r  response_serializers	            r   add_family_memberr  `  sb   
 'v)IYZN~~2>IW^K_`ee
 $$& 	&
 
6	!))+9C!(!2!23!7M# : 7}E.$""0%ll

  '___EN";"**# @+00 --	/ /  ''
 --/ 	/A 
"r   c                    d}t        | j                  |      }	 t        j                  j	                  d      j                  t        dt        d      dt        d      dt        d      d      	      j                  d
d      j                  d      }t        j                  j	                  d      j                  d      j                  dd      }| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }g }	|rt        |t              r|}	n|g}	g }
|rt        |t              r|}
n|g}
t               }|	r|t        |	      z  }|
r|t        |
      z  }|rt         j                  j	                  |      nt         j                  j#                         }|r7	 t%        j&                  |d      }|j	                  |j)                               }|r7	 t%        j&                  |d      }|j	                  |j)                               }|j/                  dd      j                  d      d d  }g }|D ]  }|j1                  |j2                  |j4                  r|j4                  j6                  nd |j4                  r|j4                  j8                  nd |j:                  |j<                  |j>                  r|j>                  j@                  nd |jB                  r$tE        |jB                        jG                  d!      nd |jH                  d"        t-        dt        |      t        |      ||r:|jJ                  |jL                  |jN                  |jP                  |jR                  d#ni d$tT        jV                        S # t*        $ r t-        dddd      cY S w xY w# t*        $ r t-        dddd      cY S w xY w)%N   Tr0  r  r  r  r  r  )r  r  r  rq  r   r  performedByfromDatetoDate)ref_client_id__client_id__in)performed_by_id__in%Y-%m-%d)performed_at__date__gteFzInvalid fromDate formatr   r  rd   )performed_at__date__ltezInvalid toDate formatperformed_byr  z-performed_atd   z%d/%m/%Y %H:%M)r   r  r  r]  description
perform_byperformed_ontabler   )r   r  r8  logsr   ),r   r   r   r   r   annotaterM   r9   r  r  r   r   r   rS  rT  r8   r   r   r   strptimer   r=  r\   r   r   r   r  r  r  action_typechanged_datar)  rq  performed_atr   r  ref_table_namer   r   r   r   r   re   r   )r   r   r   r  r8  client_inputperformed_by_input	date_fromdate_to
client_idsuser_idsfilterslogs_qsdate_from_objdate_to_objr/  logs                    r   
change_logrA    s    G w7E 	-	#U3Z#U3Z$eCj"	 
 

 
]	+	%	&   	d+	*		j	! 
 <<##H-L ))-8  ,Illx(G JlD)%J&JH($/)H*+H cG1*==1223:i&&w/	@Q@Q@U@U@WG 	b$--iDMnn]=O=O=QnRG 	`"++GZ@Knn[=M=M=OnPG $$^_ENN_`dadeG D&&8;8I8I**44t:=:K:K3,,66QUoo++7:7G7G#**33TVYVfVfIc&6&67@@AQRlp''	
 		  =e  }}****
    " "5  	b:ST]`aa	b  	`:QR[^__	`s$    6O 6O" OO"O>=O>c                     | sydD ](  }	 t        j                  | |      j                         c S  y# t        $ r Y 7w xY w)z=Try parsing date in multiple formats, return None if invalid.N)r&  z%d/%m/%Yr   r1  r   r=  )date_strfmts     r   parse_date_saferF  e  sL    '	$$Xs388:: (
   		   #2	>>)modelsc                    t        t        |      }| j                  j                  d      }|dvrt	        dddd      S |j
                  }||rd	nd
}nt        |      }||_        ||_        | j                  |_	        |j                          t	        dd|j                   d|j                   d|j                  |j                   d|j                   |ddt        j                        S )Nr  re   )r   r   0rL  NFz$Invalid status. Allowed values: 1, 0r  r  rd   r   r   TzClient 'r  z' status updated successfully.)r   r   re   )r   r   r  )r+   r   r   r   r\   r   r  r  r   rH  r   r  r  r  re   r   )r   r  r  status_value
old_status
new_statuss         r   client_active_statusrN    s     v;F<<##H-L11E4Z[dghh!!J$Q!
&
!F%F  F
KKM f667q9P9P8QQop""//0&2I2I1JK 	
	   	" 	"r   )rt  c                    	 t         j                  j                  |      }| j                  |_        |j                  dg       |j                   d|j                   j                         }|j                          t        d| ddt        j                        S # t         j                  $ r! t        d	d
dt        j                        cY S w xY w)Nr  rH  rI  r  Tz deleted successfullyr   rd   Fr  r  )r   r   r   r   rH  r   r  r  r   rO  r4   re   r   r   r  )r   r  r  r  s       r   client_deleterP    s    -##y#1 $LL<.1112!F4K4K3LMSSU%&;<
 $$& 	&
  -'
 ++- 	--s   BB   1CCc                    	 | j                   j                  d      }|st        ddid      S |j                  j	                  d      d   j                         }|dvrt        dd	id      S |j                  j                  d
      rt        j                  |      }nt        j                  |      }|j                  D cg c]0  }|j                         j                         j                  dd      2 c}|_
        |j                  t        j                  |      d       }dddddd}|j                  |d       g d}|D cg c]  }||j                  vs| }}|rt        dd| id      S t!        t"        j$                  j'                  dd            }	t!               }
g }d}|j)                         D ]  \  }}|j                  d      r(t+        |j                  d            j                         nd}d}|sd}n||
v rd}n||	v rd}|
j-                  |       |j/                  |dz   ||j                  d      |j                  d      |j                  d      |j                  d      |d       |sd} t        ||dd d!      S c c}w c c}w # t0        $ r"}t        dt+        |      id"      cY d }~S d }~ww xY w)#Nr  r  No file uploadedr  rd   .r  xlsxlsxcsvUnsupported file formatr	  r  rK  r  r  rr  r  rR  
first_name	last_namerr  r  rR  Tr  r  r  r  rr  rR  Missing required fields: r  Fr   Client code is requiredzDuplicate client in fileClient already existsr   )r  r  r  r  rr  rR  r  zPreview generated successfully)r  r  r   rL  rN  )r  r   r4   r   r  rR  r  r  r   r!  r  r   r   r"  r#  r%  r&  r   r   r'  r(  r)  r*  r   r$  )r   r  extr+  r/  r@  required_fieldsr  missing_fieldsexisting_client_codesseen_client_codesr3  r  r4  r5  r  r  r,  s                     r   client_import_previewre  =  s   L;}}  (*< =cJJiiooc"2&,,.,,*C DSQQ 99f%T"Bt$B HJzzRzciik'')11#s;zR
XXbjjnd+ .+&(
 			.$	7 j%4L_8K!_L,EnEU*V W`cdd !$FNN$>$>}SW$>$X YE
 HCADAW#cggm45;;=]_KE1 112 55/!!+.!Ag*%(WW-@%A$'GG,>$?!ggl3)!  !
1 &4  $7
 	 	k S MX  ;Wc!f-c::;s[   +J >J -AJ 5J6AJ JJJ 4DJ =J 
J 	K%K<KKc           
      P   	 | j                   j                  d      }|st        ddid      S |j                  j	                  d      d   j                         }|dvrt        dd	id      S |j                  j                  d
      rt        j                  |      }nt        j                  |      }|j                  D cg c]0  }|j                         j                         j                  dd      2 c}|_
        |j                  t        j                  |      d       }dddddd}|j                  |d       g d}|D cg c]  }||j                  vs| }}|rt        dd| id      S t!        t"        j$                  j'                  dd            }	d}
g }|j)                         D ]  \  }}	 |j                  d      r(t+        |j                  d            j                         nd }|st-        d      ||	v rt-        d      t"        j$                  j/                  ||j                  d      |j                  d      |j                  d      |j                  d      xs ddd       |
dz  }
|	j1                  |        t        d|
t7        |      |d!d"      S c c}w c c}w # t2        $ r;}|j5                  |dz   |j                  d      t+        |      d        Y d }~@d }~ww xY w# t2        $ r"}t        dt+        |      id#      cY d }~S d }~ww xY w)$Nr  r  rR  r  rd   rS  r  rT  rX  r	  r  rK  r  r  rr  r  rR  rY  Tr  r\  r]  r  r   r^  r_  r   r   )r  r  r  rR  rr  r  r   r   r   )r  r  r  r8  rL  rN  )r  r   r4   r   r  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/  r@  ra  r   rb  rc  success_countfailed_rowsr4  r5  r  r,  s                   r   client_importri    s   N;}}  (*< =cJJiiooc"2&,,.,,*C DSQQ 99f%T"Bt$B HJzzRzciik'')11#s;zR
XXbjjnd+ .+&(
 			.$	7 j-<X_ERZZ@W%_X,EnEU*V W`cdd !$FNN$>$>}SW$>$X YHCEHWW]E[c#''-"89??Aae"$%>??"77$%<==%% +&)gg.A&B%(WW-?%@'''*"ww|4:"*" &  "%))+6) &: %2,#	

  	m S Y@  """%'#&77=#9 V$    ;Wc!f-c::;s   +K: >K: -AK: 5J)6AK: J.J.K: 4AK: 9CJ3K: )
K: 3	K7<0K2,K: 2K77K: :	L%L L% L%c                    | j                   dk(  r| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }| j                  j                  d      }t               j	                  ||||      }d|i}t        |      j                  j                  d      }t        dd	|d
      S t        dddd      S )Nr   time_periodr  report_from_datereport_to_datevisa_reportzutf-8Tr   )re   r   DataFzInvalid requestrK  r  rd   )	r  r   r   r   get_visa_expiry_reportr\   contentdecoder4   )r   rk  r  rl  rm  rn  r   report_datas           r   visa_expiry_reportrt  g  s     ~~kkoom4{{~6";;??+=> )9: l99'7
N !+.

'&&/ 	 tKPQQ55FGPSTTr   c                     	 t         j                  j                  | |      }t        |d| d      S # t         j                  $ r Y yw xY w)z=
    Check if user has given permission for a menuaction
    )r   ref_menu__menu_actionrO  F)r
   r   r   r5  r   )r   
menuactionr]  ry  s       r   has_menu_permissionrx    sV    &&**Z + 
 ttF8_e44'' r   c                     | sydD ](  }	 t        j                  | |      j                         c S  y# t        $ r Y 7w xY w)8Convert string (DD-MM-YYYY or YYYY-MM-DD) to date safelyN)r  r&  rC  r   rE  s     r   rQ   rQ     sL    '	$$UC05577 (
   		rG  c                 
   d}t        | j                  |      }| j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs | j                  j                  d      }t        j                         j                         }t        j                  j                  d      j                  dd	      }|d
k(  r#|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }nk|dk(  r"|j                  ||t        d      z   g      }nD|dk(  r"|j                  ||t        d      z   g      }n|dk(  r|r|r|j                  ||g      }|r|j                  |      }g }	|j                  d      D ]   }
|
j                  s|
j                   r|
j                   |z
  j"                  nd}|	j%                  |
j&                  |
j                  j(                  xs d d|
j                  j*                  xs d j-                         |
j.                  r|
j.                  j0                  nd|
j2                  |
j4                  |
j                   ||
j6                  r|
j6                  j8                  ndd        t;        d |	rdnd!|	|r:|j<                  |j>                  |j@                  |jB                  |jD                  d"ni d#tF        jH                  $      S )%z
    Visa Expiry Report API
    - Filters: today, 1Week, 2Weeks, 3Weeks, 1Month, 3Months, 6Months, 1Year, custom
    - Optional filter by visa country
    - Returns visa expiry details
       rk  rl  rm  	countryIdN)r  r  r  1Week   days)visa_to_date__range2Weeks   3Weeks   1Month   3MonthsZ   6Months   1Yearm  custom)ref_visa_country_idr  r   r  )r   r  country_namer  r  r  remaining_daysr  Tz,No visa records found for the given criteriar   r   r   r   r   rd   )%r   r   r   r   r  r   rt  r   r   r   excluder   r   r   r  r  r  r  r   r   r  r  r   r  r   r  r  r  r   r\   r   r   r   r   r   re   r   )r   r   r   rk  rl  rm  r  todayqsr   r  r  s               r   visa_expiryr    s    G w7E ,,""=1\W5I5I5M5Mm5\K||''(:;kw?S?S?W?WXj?k\\%%&67e7;O;O;S;STd;eN||''4]8L8L8P8PQ\8]LLN!E				#	#	#	6	E	ElTf	gB gYYE59!;L3L+MYN		 YYE59";M3M+NYO		 YYE59";M3M+NYO		 YYE59";M3M+NYO			!YYE59";M3M+NYO			!YYE59#;N3N+OYP		YYE59#;N3N+OYP		 %5.YY,<n+MYN YY+;Y< D[[(||:;..!..5066d$$ll<<BC1Q\\EbEbEhfhDijppr787I7IA..33t..NN,JKJdJd(B(B(F(Fjn	
 		 )  2#Q  }}****
    " "r   c                     | sy	 t        j                  | d      j                         S # t        $ r8 	 t        j                  | d      j                         cY S # t        $ r Y Y yw xY ww xY w)z*Convert string (YYYY-MM-DD) to date safelyNr  r&  rC  )r   s    r   rQ   rQ     sk      
388:: 	$$UJ7<<>> 		s,   #) 	A*#AA*	A&"A*%A&&A*c                    d}t        | j                  |      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }t        |t              r|j                         n|}t        |t              r|j                         n|}t        j                         j                         }t        j                  j                  d      }	|rft        |      j                         j                         j                  d	d
      }
|
dk(  r#|	j!                  ||t#        d      z   g      }	n|
dk(  r"|	j!                  ||t#        d      z   g      }	n|
dk(  r"|	j!                  ||t#        d      z   g      }	n|
dk(  r"|	j!                  ||t#        d      z   g      }	n|
dk(  r"|	j!                  ||t#        d      z   g      }	nk|
dk(  r"|	j!                  ||t#        d      z   g      }	nD|
dk(  r"|	j!                  ||t#        d      z   g      }	n|
dk(  r|r|r|	j!                  ||g      }	g }|	j%                  d      j'                  d      D ]  }|j(                  s|j*                  r|j*                  |z
  j,                  nd }|j/                  |j(                  j0                  |j(                  j2                  xs d  d	|j(                  j4                  xs d  j                         |j6                  |j*                  |d!        t9        d|rd nd"||r:|j:                  |j<                  |j>                  |j@                  |jB                  d#ni d$tD        jF                  %      S )&Nr  
timePeriodrk  	startDaterl  endDaterm  r  r  rK  1weekr   )weeks)passport_expiry_date__range2weeksr   3weeksr   1monthr  r  3monthsr  6monthsr  1yearr  r  T)passport_expiry_date__isnullr  r   )r  r  r  r  r  z)No passports found for the given criteriar   r  rd   )$r   r   r   r   r  rS  r)  r   r   rt  r   r   r   r   rR  r   r   r   r  r  r  r  r  r   r  r  r  r  r\   r   r   r   r   r   re   r   )r   r   r   rk  
start_dateend_daterl  rm  r  r  tpr   r  r  s                 r   passports_expiry_reportr    s    G w7E ,,""<0~GLL4D4D]4S~W^WkWkWoWop}W~K!!+.  G',,2B2BCU2V  GZaZnZnZrZr  tF  [GJ||	*~gll.>.>?O.P~T[ThThTlTlm}T~H .8
C-Hz'')j)3Hc)BX^^%N LLN!E				.	.|	<B ##%++-55c3?=uyWXGY?Y7Z[B8^uyWXGY?Y7Z[B8^uyWXGY?Y7Z[B8^uyVXGY?Y7Z[B9_uyVXGY?Y7Z[B9_uyVYGZ?Z7[\B7]uyVYGZ?Z7[\B8^ 0^8H.7YZB DZZTZ:CCDZ[||BCBXBX!0058>>^b//ll<<BC1Q\\EbEbEhfhDijppr==$%$:$:,
 	 \ 2#N  }}****
    " "r   c                 l   d}t        | j                  |      }| j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs | j                  j                  d      }t	        j
                         j                         }t        j                  j                  d	      j                  d
      }|dk(  r|j                  |	      }n/|dk(  r#|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }n|dk(  r"|j                  ||t        d      z   g      }nk|dk(  r"|j                  ||t        d      z   g      }nD|dk(  r"|j                  ||t        d      z   g      }n|dk(  r|r|r|j                  ||g      }g }|j                  d      D ]  }	|	j                  s|	j                  r|	j                  |z
  j                   nd}
|j#                  |	j$                  |	j                  j&                  |	j                  j(                  xs d d|	j                  j*                  xs d j-                         |	j.                  r|	j.                  j0                  nd|	j2                  |	j                  |
d         t5        d!|rdnd"||r:|j6                  |j8                  |j:                  |j<                  |j>                  d#ni d$t@        jB                  %      S )&z
    Travel Insurance Expiry Report API
    - Filters: today, 1Week, 2Weeks, 3Weeks, 1Month, 3Months, 6Months, 1Year, custom
    - Extra filters: expired, valid
    rh  r  rk  r  rl  r  rm  N)r   r  r  r  r  r  )insurance_to_date__ranger  r  r  r  r  r  r  r  r  r  r  r  r  r   r   r  )r   r  r  r  r  r   r  Tz8No travel insurance records found for the given criteriar   r  rd   )"r   r   r   r   r   rt  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   re   r   )r   r   r   rk  r  r  r  r  r   r  r  s              r   travel_insurance_expiryr  Q  sQ    G w7E ,,""<0SGLL4D4D]4SK!!+.V',,2B2BCU2VJ||	*Pgll.>.>?O.PHLLN!E		&	&	.	.	.	F	U	UVb	cB gYYY/		YY	q@Q8Q0RYS		 YY	r@R8R0SYT		 YY	r@R8R0SYT		 YY	r@R8R0SYT			!YY	r@R8R0SYT			!YY	s@S8S0TYU		YY	s@S8S0TYU		 ZHYYX0FYG D{{./~~ADAVAV#//%7==\`&&11!nn>>D"EQs~~GfGfGljlFmnttv@C@V@V#"8"8"<"<\`#&#:#:!$!6!6,
 	 0  2#]  }}****
    " "r   c                     | sydD ](  }	 t        j                  | |      j                         c S  y# t        $ r Y 7w xY w)rz  N)z%d-%mz%m-%drC  r{  s     r   rQ   rQ     sL    !	$$UC05577 "
   		rG  c                 
   d}t        | j                  |      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }t        j                         j                         }t        j                  j                  d	      }|}|t        d
      z   }	d}
d }d }	 |rYt        |      j                         j                         j                  dd      }|dk(  r|}	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d
      z   }	n|dk(  r|r|r~	 t!        j"                  |d      j                         }t!        j"                  |d      j                         }|j$                  |j&                  f}|j$                  |j&                  f}d}
nd}
g }|D ]Y  }|j,                  j$                  }|j,                  j&                  }||f}|
r'|r%|r#||k  r||cxk  xr |k  nc }nS||k\  xs ||k  }nFt        |j.                  ||      }||k  rt        |j.                  dz   ||      }||cxk  xr |	k  nc }|st        |j.                  ||      }||k  rt        |j.                  dz   ||      }||z
  j0                  }|j3                  |j4                  |j6                  xs d  d|j8                  xs d  j                         |j,                  |j:                  |j<                  |d!       \ t?        d|rd nd"||r:|j@                  |jB                  |jD                  |jF                  |jH                  d#ni d$tJ        jL                  %      S # t(        $ rP |j$                  |j&                  f}|t        d
      z   j$                  |t        d
      z   j&                  f}d}
Y w xY w# t*        $ r |}|t        d
      z   }	Y :w xY w)&N	   r  rk  r  rl  r  rm  T)dob__isnullr  r  Fr  rK  r  r  r  r     r  r  r  r  r  r  r  r  r  r  r&  r   r   )r  r  r  rR  rr  r  z2No upcoming birthdays found for the given criteriar   r  rd   )'r   r   r   r   r  r   rt  r   r   r   r  r   r)  r   rR  r   r   r1  monthdayr=  r$  r  yearr  r   r  r  r  rR  rr  r\   r   r   r   r   r   re   r   )r   r   r   rk  r  r  r  r  start_filter
end_filtercustom_rangestart_tuple	end_tupler  start_dtend_dtr   r  birth_month	birth_daydob_mdin_rangedob_nextdob_upcomingr  s                            r   birth_reportr    s    G w7E 	& 	3<<M*	3##M2  	% 	8<<./	8##$67  	# 	6<<,-	6##$45  LLN!E			D		1B L,,JLKI51[!'')//199#sCBW}"
w"YA%66
x"YB%77
x"YB%77
x"YB%77
y"YB%77
y"YC%88
w"YC%88
xJ8)'00ZHMMOH%..xDIIKF $,>>8<<"@K!'vzz :I#'L !L DeekkEEII	y) KYi'&&=I= "[0GFi4G EJJY?H%

QYG#>J>H

KCLe##EJJNKK*U288NKK[["#"5"5";!<Aa>P>P>VTV=WX^^`uull"0 9 J 2#W  }}****
    " "k " )#(;;		":K"')*="=!D!Duy^aObGbFgFg hI#(L	)  1YC00
1s9   2C S- A:R S- AS*&S- )S**S- -T
Tc                 :
   d}t        | j                  |      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }| j                  j                  d      xs8 | j                  j                  d      xs | j                  j                  d      }t        j                         j                         }t        j                  j                  d	      }|}|t        d
      z   }	d}
d }d }	 |rYt        |      j                         j                         j                  dd      }|dk(  r|}	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d      z   }	n|dk(  r|t        d
      z   }	n|dk(  r|r|r~	 t!        j"                  |d      j                         }t!        j"                  |d      j                         }|j$                  |j&                  f}|j$                  |j&                  f}d}
nd}
g }|D ]h  }|j,                  s|j,                  j$                  }|j,                  j&                  }||f}d}|
r'|r%|r#||k  r||cxk  xr |k  nc }nS||k\  xs ||k  }nFt        |j.                  ||      }||k  rt        |j.                  dz   ||      }||cxk  xr |	k  nc }|st        |j.                  ||      }||k  rt        |j.                  dz   ||      }||z
  j0                  }|j3                  |j4                  |j6                  xs d  d|j8                  xs d  j                         |j,                  |j:                  |j<                  |d!       k t?        d|rd nd"||r:|j@                  |jB                  |jD                  |jF                  |jH                  d#ni d$tJ        jL                  %      S # t(        $ rP |j$                  |j&                  f}|t        d
      z   j$                  |t        d
      z   j&                  f}d}
Y (w xY w# t*        $ r |}|t        d
      z   }	Y Iw xY w)&N
   r  rk  r  rl  r  rm  T)anniversary_date__isnullr  r  Fr  rK  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r&  r   r   )r  r  r  rR  rr  r  z6No upcoming anniversaries found for the given criteriar   r  rd   )'r   r   r   r   r  r   rt  r   r   r   r  r   r)  r   rR  r   r   r1  r  r  r=  r$  r  r  r  r   r  r  r  rR  rr  r\   r   r   r   r   r   re   r   )r   r   r   rk  r  r  r  r  r  r  r  r  r  r  r  r  r   r  
anni_monthanni_dayanni_mdr  r  r  r  s                            r   anniversary_reportr    s    G w7E 	& 	3<<M*	3##M2  	% 	8<<./	8##$67  	# 	6<<,-	6##$45  LLN!E					>B L,,JLKI51[!'')//199#sCBW}"
w"YA%66
x"YB%77
x"YB%77
x"YB%77
y"YB%77
y"YC%88
w"YC%88
xJ8)'00ZHMMOH%..xDIIKF $,>>8<<"@K!'vzz :I#'L !L D!!''--
%%))x( KYi'&'>Y> #k1IW	5I EJJ
H=H%

Q
HE#x=:=H

JALe##EJJNJI*U288NKK[["#"5"5";!<Aa>P>P>VTV=WX^^`$%$6$6ll"0 A R 2#[  }}****
    " "s " )#(;;		":K"')*="=!D!Duy^aObGbFgFg hI#(L	)  1YC00
1s9   2C S< A:R  S<  AS95S< 8S99S< <TT)r   c                 ^
   d}t        | j                  |      }| j                  dk(  r| j                  n| j                  }d }d } ||j                  d            } ||j                  d            } ||j                  d            } ||j                  d            }	 ||j                  d	            }
 ||j                  d
            } ||j                  d            } ||j                  d            } ||j                  d            } ||j                  d            }|r ||      nd }|r ||      nd }t        j                  j                         }|r[|rY|j                  t        j                  |t        j                        t        j                  |t        j                        f      }nm|r5|j                  t        j                  |t        j                              }n6|r4|j                  t        j                  |t        j                              }|r|j                  |      }|	r|j                  |	      }|
r|j                  |
      }|r|j                  |      }|r|j                  |      }|r|j                  |      }|r|j                  |      }|r|j                  |      }|j                         }g }|D ]  }dj                  t        d |j                   |j"                  |j$                  g            }|j&                  j                         D cg c]>  }|j(                  r|j(                  j*                  nd|j,                  |j.                  d@ }}|j1                  |j2                  |dj                  |D cg c]  }|d   	 c}      dj                  t        d |j4                  r|j4                  j                   nd|j4                  r|j4                  j"                  nd|j4                  r|j4                  j$                  ndg            |	||j6                  |j8                  rt;        |j8                        nd|j<                  rt;        |j<                        nd|j>                  rt;        |j>                        nd|j@                  d        tC        d d||r?tE        |d!d"      tE        |d#d"      tE        |d$d"      tE        |d%d"      tE        |d&d"      d'ni d(tF        jH                  )      S c c}w c c}w )*N   r   c                     | dvr| S d S )N)Nr   null	undefinedr  )r_  s    r   	normalizez report_client.<locals>.normalizet  s    !@@sJdJr   c                     	 | r | j                         j                         dv ry t        j                  | j                         d      j	                         S # t
        $ r}t        d|  d|        Y d }~y d }~ww xY w)N)r   r  r  r&  u!   ❌ Date parse failed for value 'z': )r   rR  r   r1  r   r$  print)r_  r,  s     r   safe_parse_datez&report_client.<locals>.safe_parse_datew  so    	#))+++-1JJ$$SYY[*=BBDD 	5cU#aSAB	s   "A 1A 	A; A66A;r  r  r   r  r  r  status_filterr  r  city_id)created_at__range)created_at__gte)created_at__lte) client_companies__ref_company_id)reference_from__icontainsr  )reference_remark__icontainsr  )residential_country_id)residential_state_id)residential_city_idr  r   )r   r[  r  r  r   )r   r  r   	referencer  r  re   r   r   r   rg  Tr   Fr   r   r   r   r   r  rd   )%r   r   r  r  r   r   r   r   r   r   r   combiner   minr  rr  r  r  r  r  r  r   r[  r  r   r  r  r  r   r)  r  r  rg  r\   r5  re   r   )r   r   r   paramsr  r  r  r  r   r  r  r  r  r  r  r  querysetr   r  r  r   r   r  s                          r   report_clientr  k  s    G w7E%,^^u%<W!!',,FK 6::l34JJ/0H6::l34Jvzz*:;<NVZZ78L ,>!?@fjj9:M6::l34JJ/0H

9-.G 1;,J,4x($H~~!!#H h??h6F6FzSWS[S[6\^f^n^nowy}  zB  zB  _C  6D?  E	??83C3CJPTPXPX3Y?Z	??83C3CHdhh3W?X ??J?O ??^?L???>???O?P??????*?E???A??w??  "H DHHVD$$%%##+
  	 "22668

 9% CHBSBS 1 1 > >Y[$00#(#8#8 9 	 
 	""$yyY!GY!N"3Y!GH&7=7H7H!!33b8>8I8I!!44r6<6G6G!!22R0 # 
 - 0**:@:T:Ts6556Z\6<6N6NS112TV4:4K4KC//0QS ++
 	 >    z59ui7z59!%u=!%u=
    " "3
 "Hs   <AT%'T*c                     t         j                  j                  d      j                         }t	        |d      }t        d|j                  d      S )NemailsTr   r  )r   r   r  r   rw   r\   r   )r   setupsr   s      r   list_email_setupsr    sC     00:>>@F%f48Jjoo>??r   c                    | j                   dk(  r| j                  j                  d      n| j                  j                  d      }|st	        dddt
        j                        S t        j                  j                  |      \  }}| j                   dk(  r3t	        d|j                  |j                  d	t
        j                        S | j                   d
k(  r| j                  j                  d      }|st	        dddt
        j                        S ||_        |j                          t	        d|j                  |j                  d	t
        j                        S y )Nr   report_typeFzreport_type is requiredr   rd   )r  T)r   r  rR  r   rR  r  )r  r  r   r   r\   re   r   r   r   rV  r  rR  r   r   r   )r   r  setupr  rR  s        r   email_setupr    sC    >E^^u=T'&&**=9ZaZfZfZjZjkxZyK*CD..
 	

  ''55+5NNE7~~ ,,[[
 $$	& 	& 
6	!  )!.AB22 
 

 ,,[[
 ))	+ 	+ 
"r   c                 T    t        d       t        dddt        j                        S )Nsend_anniversary_emailTzAnniversary email triggeredr   rd   )r   r\   re   r   r  s    r   trigger_anniversary_reportr  r  s'     )*1NOX^XjXjkkr   c                     	 t        d       t        dddt        j                        S # t        $ r+}t        dd| dt        j
                        cY d}~S d}~ww xY w)	zN
    Trigger the birthday report email by calling the management command.
    send_birthday_emailTzBirthday email triggeredr   rd   Fz"Failed to trigger birthday email: N)r   r\   re   r   r$  r  r   r,  s     r   trigger_birthday_reportr  y  sn    O*+D5OPY_YkYkll OE8Z[\Z]6^_hn  iN  iN  O  	OOs   (+ 	A AAAc                     	 t        d       t        dddt        j                        S # t        $ r4}t        ddt        |       dt        j                        cY d}~S d}~ww xY w)	zI
    Trigger the passport expiry email report via management command
    send_passport_expiry_emailTz4Passport expiry email report triggered successfully.r   rd   Fz*Failed to trigger passport expiry report: Nr   r\   re   r   r$  r)  r  r  s     r   trigger_passport_expiry_reportr    ss    
912M
 $$& 	&  9CCF8L
 779 	99   (+ 	A()A#A(#A(c                     	 t        d       t        dddt        j                        S # t        $ r4}t        ddt        |       dt        j                        cY d}~S d}~ww xY w)	zQ
    Trigger the travel insurance expiry email report via management command
    "send_travel_insurance_expiry_emailTz<Travel insurance expiry email report triggered successfully.r   rd   Fz2Failed to trigger travel insurance expiry report: Nr  r  s     r   trigger_travel_insurance_reportr    st    99:U
 $$& 	&  9KCPQF8T
 779 	99r  c                     	 t        d       t        dddt        j                        S # t        $ r4}t        ddt        |       dt        j                        cY d }~S d }~ww xY w)Nsend_visa_expiry_emailTz0Visa expiry email report triggered successfully.r   rd   Fz&Failed to trigger visa expiry report: r  r  s     r   trigger_visa_expiry_reportr    ss    
9-.I
 $$& 	&  9?AxH
 779 	99r  c                     t        | dd      S )Nz Views/errors/html/error_404.htmlrM  rd   r   r  s    r   error_404_viewr        '=cJJr   c                     t        | dd      S )Nz Views/errors/html/error_400.htmlr  rd   r  r  s    r   error_400_viewr    r  r   r  )r=  (  django.shortcutsr   r   users.modelsr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   users.formsr   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   django.httpr(   r)   r*   r+   django.contrib.auth.decoratorsr,   django.contrib.authr-   r.   django.contribr/   django.contrib.auth.viewsr0   r1   django.urlsr2   django.utils.httpr3   r4   django.template.loaderr5   django.utils.timezoner6   django.core.paginatorr7   django.db.modelsr8   r9   r:   users.utilsr;   r<   r=   r>   r?   r@   rA   users.signalsrB   rC   rD   django.utils.cryptorE   django.viewsrF   django.core.mailrG   django.confrH   rI   rJ   django.contrib.auth.hashersrK   rL   django.db.models.functionsrM   django.views.decorators.csrfrN   django.views.decorators.httprO   django.utils.decoratorsrP   django.utils.dateparserQ   rR   django.utils.dateformatrS   django.utils.htmlrT   django.formsrU   rV   users.permissionsrW   rX   rY   	django.dbrZ   rest_framework.responser\   rest_framework.permissionsr]   r^   rest_framework.authtoken.modelsr_   rest_framework_simplejwt.tokensr`   ra   rest_framework.authenticationrb   rest_framework.viewsrc   rest_frameworkre   django.core.serializers.jsonrf   jsonrest_framework.parsersrg   rh   ri   rest_framework.decoratorsrj   rk   rl   users.serializersrm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   django.contrib.auth.modelsr   openpyxlrandomrW  pandasr  re  ro  r   django.utilsr   r   r   r   r   r   r   users.helperr   r   r   django.core.managementr   jwtr   r   r   r   r   r<  r  r6  rE  rP  r{  r}  r  r  r  r  r  r  r  r  r  r  r'  r9  r:  rb  rx  r}  r  r  r  r  r  r  r  rer  r  r  r  r  r  r  r  collectionsr  r  r  rA  rF  rH  rN  rt  rP  re  ri  rt  rx  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r   <module>r;     sI   - c  c  c  c  c  c u  u  u  u  u R R 6 9 3 # ; $ = $ 3 , + ( ( g  g  g L L 1  &   H E - % 4 = 4 - 5 . $ ? A \ \ ! , @ 1 D = ( ! , :  - > ( R RA A A A A A 5        ! + 4 4 " 0  % / 
 >!H 
5'_%&" ' "8 
5'_%&&" ' &"T 
5'_%&" ' "	!F 
6(_%&*-.4+ / ' 4+l3jD 
5%._%&*-.)"  / ' )"X 
6(_%&!"@F # ' @FF 
6(_%&!"M" # ' M"` 
8*_%&J ' J@ 
6(XJB"   B"L 
6(XJV+   V+t 
6(XJI   I^* 
6(XJ."   ."f 
6(XJ&+   &+T 
6(XJ-   -4*X 
6(XJ\-   \-~FT 
5'XJ"   "8 
5'XJ
!   
! 
5'XJ   0 
5'XJ   (  
5'_%&^V ' ^VBtn 
5'_%&2" ' 2"j:z  ! 
5%._%&C&  ' C&NCL 
6(_%&SK  ' SKn 
5&/_%&-8 ' -8` + +, 	8*_%&x '  x@ 
6(_%&
 ' 
*)| 
5'_%&-+ ' -+^xt 
5'_%&f" ' f"R7taH7t 
5'_%&Q" ' Q"h 
5'XJ9   9$P " 		
2*>
	 
6(_%&*-.+ / ' +2>?B0 
5'_%&v" ' v"r:cL 
5'_%&*-. +  / '  +F: $(&V 
5&/_%&*-.,/  / ' ,/b 
5&/_%&k" ' k"\}~]~"J"H7r	8_DB  !	5'_%&!" ' !"FKZ  %Vr!H 
8*_%&- ' -0&R 
6(_%&!"M; # ' M;` 
6(_%&!"O; # ' O;fIV2l 
5'_%&5U ' 5Up,
	 
5&/_%&P" ' P"fYx0f2'T
 
5&/_%&I" ' I"X 
5&/_%&R" ' R"j	EN 
5&/_%&H" ' H"V<~ 
5&/_%&M" ' M"d 	5&/_%&w" ' w"x 
5'_%&@ ' @ 
5&/_%&!+ ' !+H(T!F 
6(_%&l ' l
 
6(_%&O ' O 
6(_%&9 ' 9" 
6(_%&9 ' 9$ 
6(_%&9 ' 9KKr   