
    h                         d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dl	m	Z	 d Z
d Zd	 Zd
 ZddZd ZddZddZd Z	 y)    	send_mail)UserPermissionsN)models)	FieldFile)datetimec                  @    t        t        j                  dd            S )Ni i?B )strrandomrandint     9D:\Kush\my_value_trip_django\my_value_trip\users\utils.pygenerate_otpr      s    v~~ff-..r   c                 .    t        dd| dd| gd       y )NzYour Login OTP - My Value TripzYour OTP for login is: T 

 This OTP is valid for 5 minutes.  Please do not share this OTP with anyone else.zno-reply@myvaluetrip.comF)subjectmessage
from_emailrecipient_listfail_silentlyr   )emailotps     r   send_login_otpr      s+    0)#  /E  F-wr   c                 6    d}d| d}t        ||d| gd       y )NzYour Password Reset OTPz%Use this OTP to reset your password: r   znoreply@myvaluetrip.comF)r   r   )r   r   r   r   s       r   send_forgot_password_otpr      s3    'G5cU  ;Q  RG3eWESr   c           	          | r| j                   sg S t        t        j                  j	                  |       j                  d      j                  d      j                  ddddd            S )zAReturn a safe, recursion-free list of menu dicts for the sidebar.)ref_userref_menuref_menu__menu_order_noref_menu__idref_menu__menu_nameref_menu__menu_urlref_menu__icon)is_authenticatedlistr   objectsfilterselect_relatedorder_byvalues)users    r   get_assigned_menur-      sb    t,,				
	#	+	,	! %

 r   c                     |xs g }i }|j                   j                  D ];  }|j                  }||v rt        | |d      }t        ||d      }||k7  s4||d||<   = |S )zO
    Compare old_instance and new_instance, return dict of changed fields.
    N)oldnew)_metafieldsnamegetattr)old_instancenew_instanceexclude_fieldschangesfield
field_name	old_value	new_values           r   get_changed_fieldsr=   /   sw     $)rNG##**ZZ
'L*d;	L*d;		!*3I"FGJ + Nr   c                    i ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&}i }| j                         D ]   \  }}||v r	||||   <   |j                  d'      rt        |j                  d(      d)   j                  d*      d+         }|j                  d,      d-   j	                  d*d.      }d/|vrg |d/<   t        |d/         |k  r&|d/   j                  i        t        |d/         |k  r&|d0k(  r||d/   |   d1<   |d2k(  r||d/   |   d2<   |d3k(  s|j                         d4v |d/   |   d5<   |||<    |S )6z~
    Convert incoming payload keys like clientDetails[firstName]
    into serializer-friendly keys like client_first_name
    zclientDetails[firstName]client_first_namezclientDetails[middleName]client_middle_namezclientDetails[lastName]client_last_namezclientDetails[salutation]client_salutationzclientDetails[dob]dobzclientDetails[gender]genderzclientDetails[occupation]
occupationzclientDetails[maritalStatus]marital_statuszclientDetails[reference]reference_fromzclientDetails[country]residential_countryzclientDetails[state]residential_statezclientDetails[city]residential_cityzclientDetails[pincode]residential_pincodezclientDetails[countryCode]country_codezclientDetails[contactNo]
contact_nozclientDetails[email]r   zclientDetails[preferredContact]preferred_contact_methodresidential_address
aadhaar_nopan_no)z!clientDetails[residentialAddress]zclientDetails[aadhaarNo]zclientDetails[panNo]z
companies[[   ]r   z][ 	companiescompanyref_company_iddesignationprimary)true1
is_primary)items
startswithintsplitreplacelenappendlower)data
client_map
normalizedkeyvalidxr9   s          r   normalize_client_payloadrm   D   s.   "$7#%9 	"#5 	$%8	
 	e 	  	$\ 	'(8 	#$4 	!"7 	 3 	1 	!"7 	%n 	#L  	!" 	*+E#$ .C$0 ()J. JJJLS**-Jz#'^^L)ciinQ'--c2156CIIdOB'//R8E*,*,
;'j-.#5;'..r2 j-.#5	!AD
;',-=>-'>A
;',];)#=@YY[M=Y
;',\: "JsO' !* r   c           	         dd l mc mc mc m} g }t        | t              r.| j                         D ]  \  }}|t        || d|       z  } |S t        | t              r*t        |       D ]  \  }}|t        || d| d      z  } |S 	 ddlm} t        | |      s%| j                  j                  j                  d      r&|j!                  |t#        |       j                  f       |S # t$        $ r Y |S w xY w)Nr   .rR   rT   )Filer   )django.db.models.fields.filesdbr   r2   files
isinstancedictr_   _find_non_serializablesr&   	enumeratedjango.core.files.baserp   	__class____name__endswithre   type	Exception)objpath
filefieldsissueskvirp   s           r   rv   rv   z   s    66F#tIIKDAq-aD61#??F   M 
C	cNDAq-aD61#Q@@F # M	3#t$(>(>(G(G(TtT#Y%7%789 M  	M	s   AC* *	C76C7c                 |   t        d       i }|xs g }| j                  j                  D ]q  }|j                  |v rt	        | |j                        }t        |t              r+	 |r|j                  r|j                  nd ||j                  <   c|||j                  <   s |S # t        $ r d ||j                  <   Y w xY w)Nz!>>> Using SAFE serialize_instance)	printr1   r2   r3   r4   rt   r   url
ValueError)instancer7   rg   r9   values        r   serialize_instancer      s    	
-.D#)rN&&::'%**-eY'(05%**599$UZZ   %D ' K  (#'UZZ (s   #)B  B;:B;c                    t        | t              r-| j                         D ci c]  \  }}|t        |       c}}S t        | t              r| D cg c]  }t        |       c}S t        | t
        j
                        r| j                  d      S t        | t
        j                        r| j                  d      S | S c c}}w c c}w )zFRecursively convert datetime/date objects to string in desired format.z%Y-%m-%d %H:%M:%Sz%Y-%m-%d)rt   ru   r_   convert_datetimer&   r   strftimedate)r~   r   r   s      r   r   r      s    #t3699;?;41a#A&&;??	C	-01S #S11	C**	+||/00	C	'||J''J @1s   B?C)N)root)django.core.mailr   users.modelsr   r   	django.dbr   rq   r   r   r   r   r   r-   r=   rm   rv   r   r   r   r   r   <module>r      sP    & (   3 /S&*3l(.
.r   