a
    8òÒe<‰ ã                   @   sT  d dl mZ d dlmZ d dlmZ d dl mZmZmZ d dlm	Z	m
Z
mZ d dlmZ ddlmZ d d	lmZ d d
lmZ d dlmZ d dlZd dlZd dlZd dlmZ d dlmZ ddlT d dlT d dlT d dl m!Z!m"Z" d dl#m$Z$ d dl%Z%ddl&T d dl'm'Z' d dl(Z(d dl)m*Z* d dl+m,Z, d dl-Z-d dl%Z%d dl.m/Z/ d dl m0Z0 d dl1Z1d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 d dl8m9Z9 ddl:T d dl;Z;dd„ Z<dd„ Z=dd „ Z>d!d"„ Z?G d#d$„ d$eƒZ@G d%d&„ d&eƒZAG d'd(„ d(eƒZBG d)d*„ d*eƒZCG d+d,„ d,eƒZDG d-d.„ d.eƒZEG d/d0„ d0eƒZFG d1d2„ d2eƒZGd3d4„ ZHG d5d6„ d6eƒZIG d7d8„ d8eƒZJG d9d:„ d:eƒZKG d;d<„ d<eƒZLd=d>„ ZMG d?d@„ d@eƒZNG dAdB„ dBeƒZOG dCdD„ dDeƒZPG dEdF„ dFeƒZQG dGdH„ dHeƒZRG dIdJ„ dJeƒZSG dKdL„ dLeƒZTG dMdN„ dNeƒZUG dOdP„ dPeƒZVG dQdR„ dReƒZWG dSdT„ dTeƒZXG dUdV„ dVeƒZYG dWdX„ dXeƒZZG dYdZ„ dZeƒZ[G d[d\„ d\eƒZ\G d]d^„ d^eƒZ]d_d`„ Z^G dadb„ dbeƒZ_G dcdd„ ddeƒZ`dedf„ ZaG dgdh„ dheƒZbG didj„ djeƒZcdkdl„ ZdG dmdn„ dneƒZeG dodp„ dpeƒZfdqdr„ ZgG dsdt„ dteƒZhG dudv„ dveƒZiG dwdx„ dxeƒZjG dydz„ dzeƒZkG d{d|„ d|eƒZld}d~„ ZmG dd€„ d€eƒZnG dd‚„ d‚eƒZoG dƒd„„ d„eƒZpG d…d†„ d†eƒZqG d‡dˆ„ dˆeƒZrG d‰dŠ„ dŠeƒZsG d‹dŒ„ dŒeƒZtG ddŽ„ dŽeƒZuG dd„ deƒZvd‘d’„ ZwG d“d”„ d”eƒZxG d•d–„ d–eƒZyG d—d˜„ d˜eƒZzd™dš„ Z{G d›dœ„ dœeƒZ|G ddž„ džeƒZ}G dŸd „ d eƒZ~G d¡d¢„ d¢eƒZG d£d¤„ d¤eƒZ€G d¥d¦„ d¦eƒZG d§d¨„ d¨eƒZ‚G d©dª„ dªeƒZƒG d«d¬„ d¬eƒZ„G d­d®„ d®eƒZ…G d¯d°„ d°eƒZ†G d±d²„ d²eƒZ‡G d³d´„ d´eƒZˆG dµd¶„ d¶eƒZ‰G d·d¸„ d¸e5ƒZŠG d¹dº„ dºe5ƒZ‹G d»d¼„ d¼e5ƒZŒd½d¾„ Zd¿dÀ„ ZŽdS )Áé    )Úrender)ÚTemplateView)ÚView)r   ÚHttpResponseÚredirect)ÚauthenticateÚloginÚlogout)Úmessagesé   )Úforms)ÚUser)ÚJsonResponse)ÚmailN)Úsettings)Úrender_to_string)Ú*)ÚQÚCount)Ú	Paginator)Údatetime)Úlogin_required)Úmethod_decorator)Ú
make_aware)ÚSum)ÚFCMNotification)ÚAPIView)ÚResponse©Ústatusc                  C   s`   t j ¡  ¡ } | rX| jsdS | j}|dd … }t|ƒd }t|ƒ}| d¡}dt|ƒ S dS d S )NZTRANS000001é   r   ZTRANS)ÚSeerUserTranscationÚobjectsÚallÚlastÚtranscation_idÚintÚstrÚzfill)ZlastObjZtheId© r)   ú1/var/www/html/Ryun_Seer/seer/admin_panel/views.pyÚgenerateTranscationsId(   s    
r+   c                 C   s>   | j  d¡}tjj|d ¡ }|r*tdƒS d}t|ddS d S )NÚemail©ÚusernameÚtruez)This email does not exist in our databaseF©Úsafe)ÚGETÚgetr   r"   ÚfilterÚfirstr   r   )ÚrequestÚtextÚpostÚmessager)   r)   r*   Ú
checkEmail7   s    r:   c                 C   sR   | j  dd¡}| j  d¡}tjj|d}| |¡dkrFd}t|ddS tdƒS d S )	Nr,   Ú Úpasswordr-   Fz!Please enter the correct passwordr0   r/   )r2   r3   r   r"   Úcheck_passwordr   r   )r6   r7   r<   Úuserr9   r)   r)   r*   ÚcheckLoginPassword@   s    r?   c                 C   sH   | j  d¡}tjj| jjd}| |¡dkr<d}t|ddS tdƒS d S )NÚold_password©r,   Fz%Does not match with the old password.r0   r/   )	r2   r3   r   r"   r>   r,   r=   r   r   )r6   r@   r>   r9   r)   r)   r*   ÚadminCheckPasswordJ   s    rB   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )Ú
adminLoginz
login.htmlc                 C   s   t || jƒS ©N©r   Útemplate_name©Úselfr6   r)   r)   r*   r3   V   s    zadminLogin.getc                 C   s   t  |j¡}| ¡ r||j d¡}|j d¡}t||d}|rbtdƒ t||ƒ t	 
|d¡ tdƒS t	 
|d¡ t|| jƒS nt|dd	|iƒS d S )
Nr,   r<   )r.   r<   ÚyeszLogin successfullyz
/dashboardzInvalid email and password.r   Úform)r   ZadminLoginFormÚPOSTÚis_validÚcleaned_datar3   r   Úprintr   r
   Úsuccessr   r   rF   )rH   r6   rJ   r,   r<   r>   r)   r)   r*   r8   X   s    
zadminLogin.postN©Ú__name__Ú
__module__Ú__qualname__rF   r3   r8   r)   r)   r)   r*   rC   T   s   rC   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚadminForgetPasswordzforgot-password.htmlc                 C   s   t || jƒS rD   rE   rG   r)   r)   r*   r3   n   s    zadminForgetPassword.getc                 C   sÜ   t  |j¡}| ¡ rÆ|j d¡}tjj|d 	¡ }d 
dd„ tdƒD ƒ¡}dt|jƒ d | }ttjƒ| }||_| ¡  d	}td
d|iƒ}	|	}
tj}|}tj||
||g|	d t |d¡ tdƒS t|| jd|iƒS d S )Nr,   rA   r;   c                 S   s   g | ]}t  tjtj ¡‘qS r)   )ÚrandomÚchoiceÚstringÚascii_lettersÚdigits)Ú.0Únr)   r)   r*   Ú
<listcomp>v   ó    z,adminForgetPassword.post.<locals>.<listcomp>é   z/forgot-admin/ú/zForgot Passwordz forget_admin_password_email.htmlÚlink©Úhtml_messagez/A link has been successfully sent to your mail.z/admin-forget-passwordrJ   )r   ZadminforgetpasswordrK   rL   rM   r3   Ú
SuperAdminr"   r4   r5   ÚjoinÚranger'   r,   r   ÚBASE_URLÚforgotPasswordLinkÚsaver   ÚEMAIL_HOST_USERr   Ú	send_mailr
   rO   r   r   rF   )rH   r6   rJ   r,   Ú	admin_objZran_numZbaselinkZcompletelinkÚsubjectrb   Úplain_messageÚ
from_emailÚtor)   r)   r*   r8   q   s$    zadminForgetPassword.postNrP   r)   r)   r)   r*   rT   l   s   rT   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚforgetPasswordVerificationzreset-password.htmlc                 C   sr   t | jjƒ}| d¡d }tjj|d ¡ }|jdkr@t	|dƒS tjj||d ¡ }|r^d}nd}t	|| j
tƒ ƒS )	Nr_   éþÿÿÿrA   Ú
LinkExpiryzlink-expire.html)r,   rg   TF)r'   r6   ÚpathÚsplitrc   r"   r4   r5   rg   r   rF   Úlocals)rH   r6   r`   Ú
user_emailZlink_expiryrk   Úvalidr)   r)   r*   r3   ˆ   s    

zforgetPasswordVerification.getc           	      C   sÜ   t  |j¡}| ¡ rÆ|j d¡}|j d¡}t| jjƒ}| 	d¡d }t
d|ƒ tjj|d ¡ }tjj|jjd ¡ }|r°| |¡ | ¡  d|_| ¡  t |d	¡ tdƒS t |d
¡ tdƒS nt|| jd|iƒS d S )NÚnew_passwordÚconfirm_new_passwordr_   éýÿÿÿrv   rA   ©Úidrr   zPassword changed successfullyúSomething went wrongrJ   )r   ZforgetverificationrK   rL   rM   r3   r'   r6   rs   rt   rN   rc   r"   r4   r5   r   r>   r|   Úset_passwordrh   rg   r
   rO   r   Úerrorr   rF   )	rH   r6   rJ   rx   ry   r`   rv   rk   Úuser_objr)   r)   r*   r8   •   s&    


zforgetPasswordVerification.postNrP   r)   r)   r)   r*   rp   †   s   rp   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )Ú	dashboardzdashboard.htmlr_   ©Ú	login_urlc                    s   t jj|jjd ¡ }tj ¡  ¡ }t	j ¡  ¡ }tjjdd 
d¡d d… }t	jjdd 
d¡d d… }tj ¡  ¡ }tjjtdƒdd }ttjƒ}	tj ¡ d d… }
g d	¢}g }d
d l}|j ¡ }|j‰ |D ]$}tjjˆ |dd ¡ }| |¡ qÒ‡ fdd„tddƒD ƒ}t|| jtƒ ƒS )N©r>   T©Úend_date__isnullú-idr    Úamount)Útotal_amountr‰   ©Z01Z02Z03Z04Z05Z06Z07Z08Z09Ú10Z11Z12r   )Úcreated_at__yearÚcreated_at__monthr†   c                    s*   g | ]"}t d d„ tjjˆ |dD ƒƒ‘qS )c                 s   s   | ]}t |jƒV  qd S rD   )Úfloatrˆ   )rZ   Ztranscationr)   r)   r*   Ú	<genexpr>Å   r]   z+dashboard.get.<locals>.<listcomp>.<genexpr>)rŒ   r   )Úsumr!   r"   r4   )rZ   Úi©Úyearr)   r*   r\   Å   s   ÿz!dashboard.get.<locals>.<listcomp>r   é   )rc   r"   r4   r>   r|   r5   ÚSeerUserr#   ÚcountÚFortuneTellerÚorder_byÚFortuneAppointmentBookr!   Ú	aggregater   r'   r   rf   r   ÚdateÚtodayr“   Úappendre   r   rF   ru   )rH   r6   rk   r€   Úfortune_objZfive_user_objZfive_fortune_objZtotal_bookingsZtotal_earningÚbase_urlÚbooking_dataÚ
month_listÚbookingsr   rœ   ÚmnthÚall_bookingZearningr)   r’   r*   r3   ¯   s*    


ÿzdashboard.getN©rQ   rR   rS   rF   r   r   r3   r)   r)   r)   r*   r   ­   s   r   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚuserListzusers_list.htmlr_   r‚   c              
   C   sJ  zt jj|jjd ¡ }ttjƒ}t	jjdd 
d¡}|j d¡}|j d¡}|j d¡}d}tƒ }	|rœ|	 t|d	t|d
B t|dB t|dB tj¡ |rÄ|rÄ|	 t||d | gdtj¡ t	jj|	dd 
d¡}t|dƒ}
|j d¡}|
 |¡}t|| jtƒ ƒW S  tyD } z t |d¡ tdƒW  Y d }~S d }~0 0 d S ©Nr„   Tr…   r‡   ÚsearchÚ
start_fromÚstart_toú11:59:59)Zfirst_name__icontains)Zlast_name__icontains)Zemail__icontains)Zphone_number__icontainsÚ )Zcreated_at__rangeé
   Úpageú&Something went wrong.Please try again.r   )rc   r"   r4   r>   r|   r5   r'   r   rf   r•   r˜   r2   r3   r   ÚaddÚANDr   Úget_pager   rF   ru   Ú	Exceptionr
   Úwarningr   )rH   r6   rk   rŸ   r€   Úsearch_postr©   rª   ÚtimeÚlookupsÚ	paginatorÚpage_numberZ	user_dataÚer)   r)   r*   r3   Ë   s*    
2 

zuserList.getNr¥   r)   r)   r)   r*   r¦   É   s   r¦   c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚchangeUserStatusr_   r‚   c              
   C   s°   zrt jj|jd d}|jd |_| ¡  |jdkrRt |d¡ t|j	 d¡ƒW S t 
|d¡ t|j	 d¡ƒW S W n8 tyª } z t |d¡ td	ƒW  Y d }~S d }~0 0 d S )
NÚmain_idr{   r   Ú1zUser status is activatedÚHTTP_REFERERzUser status is deactivatedr¯   úadmin-dashboard)r•   r"   r3   rK   r   rh   r
   rO   r   ÚMETAr   r³   r´   r   ©rH   r6   Zpubrº   r)   r)   r*   r8   ä   s    
zchangeUserStatus.postN©rQ   rR   rS   r   r   r8   r)   r)   r)   r*   r»   ã   s   r»   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚviewUserzview_user_detail.htmlr_   r‚   c           	      C   s    t jj|jjd ¡ }tjj|dd ¡ }|jrBt 	|j¡d }nd}t
tjƒ}tjjtddtddB |d	}tjj|d	jddgd
 d¡}t|| jtƒ ƒS )Nr„   T©r|   r†   r   r;   ÚPending©Úappointment_statusÚAccepted©Ú	seer_user©Zappointment_status__inr‡   )rc   r"   r4   r>   r|   r5   r•   ÚimagesÚastÚliteral_evalr'   r   rf   r™   r   Úexcluder˜   r   rF   ru   )	rH   r6   r|   rk   r€   Zuser_imagesrŸ   Úupcoming_bookingÚpast_bookingr)   r)   r*   r3   ÷   s    
  zviewUser.getNr¥   r)   r)   r)   r*   rÃ   õ   s   rÃ   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditUserzedit_user.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS ©Nr„   TrÄ   )
rc   r"   r4   r>   r|   r5   r•   r   rF   ru   )rH   r6   r|   rk   r€   r)   r)   r*   r3     s    zEditUser.getc                 C   s€   t  |j¡}| ¡ rp|j d¡}|j d¡}|j d¡}|j d¡}tjj|dj	||d t
 |d¡ tdƒS t|| jƒS d S )	NÚ
first_nameÚ	last_namer,   Úphone_numberr{   ©rÔ   rÕ   úUpdated Succesfullyz	user-list)r   ÚeditfortunetellerrK   rL   rM   r3   r•   r"   r4   Úupdater
   rO   r   r   rF   ©rH   r6   r|   rJ   rÔ   rÕ   r,   rÖ   r)   r)   r*   r8     s    zEditUser.postN©rQ   rR   rS   rF   r   r   r3   r8   r)   r)   r)   r*   rÒ     s   
rÒ   c                 C   sR   | j  d¡}| j  d¡}tjj|dj|d ¡ }|rFd}t|ddS tdƒS d S ©	NÚcustomer_idrÖ   )rÖ   r{   z This phone number already exist.Fr0   r/   )	r2   r3   r•   r"   r4   rÏ   r5   r   r   ©r6   rÞ   rÖ   r8   r9   r)   r)   r*   Úcheckphoneedituser  s    rà   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚFortunetellerListzfortuneteller_list.htmlr_   r‚   c              
   C   sV  zt jj|jjd ¡ }tjjdd d¡}|j 	d¡}|j 	d¡}|j 	d¡}|j 	d¡}d}t
ƒ }|rž| t
|d	t
|d
B t
|dB t
|dB t
j¡ |rÆ|rÆ| t
||d | gdt
j¡ tjj|dd d¡}t|dƒ}	|j 	d¡}
|	 |
¡}ttjƒ}t|| jtƒ ƒW S  tyP } z t |d¡ tdƒW  Y d }~S d }~0 0 d S r§   )rc   r"   r4   r>   r|   r5   r—   r˜   r2   r3   r   r°   r±   r   r²   r'   r   rf   r   rF   ru   r³   r
   r´   r   )rH   r6   rk   rž   rµ   r©   rª   r¶   r·   r¸   r¹   Zfortune_datarŸ   rº   r)   r)   r*   r3   &  s,    2 


zFortunetellerList.getNr¥   r)   r)   r)   r*   rá   $  s   rá   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚViewFortunetellerzview_fortuneteller_detail.htmlr_   r‚   c                 C   s„   t jj|jjd ¡ }tjj|dd ¡ }ttj	ƒ}t
jjtddtddB |d}t
jj|djddgd d	¡}t|| jtƒ ƒS )
Nr„   TrÄ   rÅ   rÆ   rÈ   ©Úfortune_tellerrË   r‡   )rc   r"   r4   r>   r|   r5   r—   r'   r   rf   r™   r   rÏ   r˜   r   rF   ru   )rH   r6   r|   rk   rž   rŸ   rÐ   rÑ   r)   r)   r*   r3   A  s    
  zViewFortuneteller.getNr¥   r)   r)   r)   r*   râ   ?  s   râ   c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚChangeFortuneTellerStatusr_   r‚   c              
   C   s°   zrt jj|jd d}|jd |_| ¡  |jdkrRt |d¡ t|j	 d¡ƒW S t 
|d¡ t|j	 d¡ƒW S W n8 tyª } z t |d¡ td	ƒW  Y d }~S d }~0 0 d S )
Nr¼   r{   r   r½   zStatus is activatedr¾   zStatus is deactivatedr¯   r¿   )r—   r"   r3   rK   r   rh   r
   rO   r   rÀ   r   r³   r´   r   rÁ   r)   r)   r*   r8   L  s    
zChangeFortuneTellerStatus.postNrÂ   r)   r)   r)   r*   rå   K  s   rå   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditFortuneTellerzedit_fortunetelller.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS rÓ   )
rc   r"   r4   r>   r|   r5   r—   r   rF   ru   )rH   r6   r|   rk   rž   r)   r)   r*   r3   _  s    zEditFortuneTeller.getc                 C   s€   t  |j¡}| ¡ rp|j d¡}|j d¡}|j d¡}|j d¡}tjj|dj	||d t
 |d¡ tdƒS t|| jƒS d S )	NrÔ   rÕ   r,   rÖ   r{   r×   rØ   zfortuneteller-list)r   rÙ   rK   rL   rM   r3   r—   r"   r4   rÚ   r
   rO   r   r   rF   rÛ   r)   r)   r*   r8   d  s    zEditFortuneTeller.postNrÜ   r)   r)   r)   r*   ræ   ]  s   
ræ   c                 C   sR   | j  d¡}| j  d¡}tjj|dj|d ¡ }|rFd}t|ddS tdƒS d S rÝ   )	r2   r3   r—   r"   r4   rÏ   r5   r   r   rß   r)   r)   r*   ÚCheckPhoneFortuneEditq  s    rç   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚHobbiesListzhobbies_list.htmlr_   r‚   c           	   
   C   sÆ   zˆt jj|jjd ¡ }tjjdd d¡}|j 	d¡}|rXtjjt
|ddd d¡}t|dƒ}|j 	d¡}| |¡}t|| jtƒ ƒW S  tyÀ } z t |d	¡ td
ƒW  Y d }~S d }~0 0 d S )Nr„   Tr…   r‡   r¨   )Zhobby__icontainsr­   r®   r¯   r   )rc   r"   r4   r>   r|   r5   ÚHobbiesr˜   r2   r3   r   r   r²   r   rF   ru   r³   r
   r´   r   )	rH   r6   rk   Údata_objrµ   r¸   r¹   Úhobbies_objrº   r)   r)   r*   r3   ~  s    

zHobbiesList.getNr¥   r)   r)   r)   r*   rè   |  s   rè   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	Ú
AddHobbieszadd_hobbies.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS ©Nr„   ©	rc   r"   r4   r>   r|   r5   r   rF   ru   ©rH   r6   rk   r)   r)   r*   r3   ’  s    zAddHobbies.getc              
   C   s”   zVt  |j¡}| ¡ rF|j d¡}tjj|d t	 
|d¡ tdƒW S t|| jƒW S W n8 tyŽ } z t	 |d¡ tdƒW  Y d }~S d }~0 0 d S )NÚ
hobby_name©ÚhobbyúCreated Succesfullyúhobbies-listr¯   r   )r   Úhobbies_formrK   rL   rM   r3   ré   r"   Úcreater
   rO   r   r   rF   r³   r´   )rH   r6   rJ   rð   rº   r)   r)   r*   r8   —  s    
zAddHobbies.postNrÜ   r)   r)   r)   r*   rì     s   
rì   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditHobbieszedit_hobbies.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS rÓ   )
rc   r"   r4   r>   r|   r5   ré   r   rF   ru   )rH   r6   r|   rk   rë   r)   r)   r*   r3   §  s    zEditHobbies.getc              
   C   sœ   z^t  |j¡}| ¡ rN|j d¡}tjj|dj	|d t
 |d¡ tdƒW S t|| jƒW S W n8 ty– } z t
 |d¡ tdƒW  Y d }~S d }~0 0 d S )Nrð   r{   rñ   rØ   rô   r¯   r   )r   rõ   rK   rL   rM   r3   ré   r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rJ   rð   rº   r)   r)   r*   r8   ­  s    
zEditHobbies.postNrÜ   r)   r)   r)   r*   r÷   ¥  s   
r÷   c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚchangeHobbiesStatusr_   r‚   c              
   C   s°   zrt jj|jd d}|jd |_| ¡  |jdkrRt |d¡ t|j	 d¡ƒW S t 
|d¡ t|j	 d¡ƒW S W n8 tyª } z t |d¡ td	ƒW  Y d }~S d }~0 0 d S )
Nr¼   r{   r   r½   zHobbies status is activatedr¾   zHobbies status is deactivatedr¯   r¿   )ré   r"   r3   rK   r   rh   r
   rO   r   rÀ   r   r³   r´   r   rÁ   r)   r)   r*   r8   ¼  s    
zchangeHobbiesStatus.postNrÂ   r)   r)   r)   r*   rø   »  s   rø   c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚServiceListzservice_list.htmlr_   r‚   c           	   
   C   sÆ   zˆt jj|jjd ¡ }tjjdd d¡}|j 	d¡}|rXtjjt
|ddd d¡}t|dƒ}|j 	d¡}| |¡}t|| jtƒ ƒW S  tyÀ } z t |d	¡ td
ƒW  Y d }~S d }~0 0 d S )Nr„   Tr…   r‡   r¨   )Zservice_name__icontainsr­   r®   r¯   r   )rc   r"   r4   r>   r|   r5   ÚServicer˜   r2   r3   r   r   r²   r   rF   ru   r³   r
   r´   r   ©	rH   r6   rk   rê   rµ   r¸   r¹   Úservice_objrº   r)   r)   r*   r3   Ñ  s    

zServiceList.getNr¥   r)   r)   r)   r*   rù   Ï  s   rù   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	Ú
AddServicezadd_service.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS rí   rî   rï   r)   r)   r*   r3   ä  s    zAddService.getc              
   C   sš   z\t  |j¡}| ¡ rL|j d¡}d}tjj||d t	 
|d¡ tdƒW S t|| jƒW S W n8 ty” } z t	 |d¡ tdƒW  Y d }~S d }~0 0 d S )NÚservice_namer   ©rþ   r   ró   úservice-listr¯   r   )r   Úservice_formrK   rL   rM   r3   rú   r"   rö   r
   rO   r   r   rF   r³   r´   )rH   r6   rJ   rþ   r   rº   r)   r)   r*   r8   é  s    
zAddService.postNrÜ   r)   r)   r)   r*   rý   â  s   
rý   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditServicezedit_service.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS rÓ   )
rc   r"   r4   r>   r|   r5   rú   r   rF   ru   ©rH   r6   r|   rk   rü   r)   r)   r*   r3   ú  s    zEditService.getc              
   C   s¢   zdt  |j¡}| ¡ rT|j d¡}d}tjj|dj	||d t
 |d¡ tdƒW S t|| jƒW S W n8 tyœ } z t
 |d¡ tdƒW  Y d }~S d }~0 0 d S )	Nrþ   r   r{   rÿ   úUpdate Succesfullyr   r¯   r   )r   r  rK   rL   rM   r3   rú   r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rJ   rþ   r   rº   r)   r)   r*   r8      s    
zEditService.postNrÜ   r)   r)   r)   r*   r  ø  s   
r  c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚchangeServiceStatusr_   r‚   c              
   C   s°   zrt jj|jd d}|jd |_| ¡  |jdkrRt |d¡ t|j	 d¡ƒW S t 
|d¡ t|j	 d¡ƒW S W n8 tyª } z t |d¡ td	ƒW  Y d }~S d }~0 0 d S )
Nr¼   r{   r   r½   zService status is activatedr¾   zService status is deactivatedr¯   r¿   )rú   r"   r3   rK   r   rh   r
   rO   r   rÀ   r   r³   r´   r   rÁ   r)   r)   r*   r8     s    
zchangeServiceStatus.postNrÂ   r)   r)   r)   r*   r    s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )Ú	SkillListzskill_list.htmlr_   r‚   c           	   
   C   sÆ   zˆt jj|jjd ¡ }tjjdd d¡}|j 	d¡}|rXtjjt
|ddd d¡}t|dƒ}|j 	d¡}| |¡}t|| jtƒ ƒW S  tyÀ } z t |d	¡ td
ƒW  Y d }~S d }~0 0 d S )Nr„   Tr…   r‡   r¨   )Zskill_name__icontainsr­   r®   r¯   r   )rc   r"   r4   r>   r|   r5   ÚSkillr˜   r2   r3   r   r   r²   r   rF   ru   r³   r
   r´   r   rû   r)   r)   r*   r3   $  s    

zSkillList.getNr¥   r)   r)   r)   r*   r  "  s   r  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚAddSkillzadd_skills.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS rí   rî   rï   r)   r)   r*   r3   7  s    zAddSkill.getc              
   C   sš   z\t  |j¡}| ¡ rL|j d¡}d}tjj||d t	 
|d¡ tdƒW S t|| jƒW S W n8 ty” } z t	 |d¡ tdƒW  Y d }~S d }~0 0 d S )NÚ
skill_namer   ©r	  r   ró   ú
skill-listr¯   r   )r   Ú
skill_formrK   rL   rM   r3   r  r"   rö   r
   rO   r   r   rF   r³   r´   )rH   r6   rJ   r	  r   rº   r)   r)   r*   r8   <  s    
zAddSkill.postNrÜ   r)   r)   r)   r*   r  5  s   
r  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	Ú	EditSkillzedit_skill.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS rÓ   )
rc   r"   r4   r>   r|   r5   r  r   rF   ru   r  r)   r)   r*   r3   M  s    zEditSkill.getc              
   C   s¢   zdt  |j¡}| ¡ rT|j d¡}d}tjj|dj	||d t
 |d¡ tdƒW S t|| jƒW S W n8 tyœ } z t
 |d¡ tdƒW  Y d }~S d }~0 0 d S )	Nr	  r   r{   r
  r  r  r¯   r   )r   r  rK   rL   rM   r3   r  r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rJ   r	  r   rº   r)   r)   r*   r8   S  s    
zEditSkill.postNrÜ   r)   r)   r)   r*   r  K  s   
r  c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚchangeSkillStatusr_   r‚   c              
   C   s°   zrt jj|jd d}|jd |_| ¡  |jdkrRt |d¡ t|j	 d¡ƒW S t 
|d¡ t|j	 d¡ƒW S W n8 tyª } z t |d¡ td	ƒW  Y d }~S d }~0 0 d S )
Nr¼   r{   r   r½   zSkill status is activatedr¾   zSkill status is deactivatedr¯   r¿   )r  r"   r3   rK   r   rh   r
   rO   r   rÀ   r   r³   r´   r   rÁ   r)   r)   r*   r8   d  s    
zchangeSkillStatus.postNrÂ   r)   r)   r)   r*   r  c  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚPaymentListszpayment_list.htmlr_   r‚   c                 C   s  t jj|jjd ¡ }tj ¡  d¡}|j	 
d¡}|j	 
d¡}d}tƒ }|rˆ| t|dt|dB t|dB t|d	B t|d
B tj¡ |rÀt|ƒ}tt |¡ƒ}	td|	ƒ | t|	dtj¡ tj |¡ d¡}t|dƒ}
|j	 
d¡}|
 |¡}t|| jtƒ ƒS )Nr„   r‡   r¨   Úbooking_dater«   ©Z seer_user__first_name__icontains©Zseer_user__last_name__icontains©Z.booking__fortune_teller__first_name__icontains©Z-booking__fortune_teller__last_name__icontains)Ztranscation_id__icontainsÚbooking_date_time©Zcreated_at__dater­   r®   )rc   r"   r4   r>   r|   r5   r!   r#   r˜   r2   r3   r   r°   r±   r'   r   r   ÚfromisoformatrN   r   r²   r   rF   ru   )rH   r6   rk   rê   rµ   r  r¶   r·   Údate_stringr  r¸   r¹   Úpayment_objr)   r)   r*   r3   x  s$    <


zPaymentLists.getNr¥   r)   r)   r)   r*   r  v  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚPaymentDetailszpayment_details.htmlr_   r‚   c                 C   sB   t jj|jjd ¡ }tjj|d ¡ }td|ƒ t|| j	t
ƒ ƒS )Nr„   r{   r  )rc   r"   r4   r>   r|   r5   r!   rN   r   rF   ru   )rH   r6   r|   rk   r  r)   r)   r*   r3   ”  s    
zPaymentDetails.getNr¥   r)   r)   r)   r*   r  ’  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚBookingListszbooking_list.htmlr_   r‚   c                 C   sª   t jj|jjd ¡ }tj ¡  d¡}|j	 
d¡}|rztjjt|dt|dB t|dB t|dB t|dB d	d
 d¡}t|dƒ}|j	 
d¡}| |¡}t|| jtƒ ƒS )Nr„   r‡   r¨   )Z%fortune_teller__first_name__icontains)Z$fortune_teller__last_name__icontainsr  r  )Z service__service_name__icontainsTr…   r­   r®   )rc   r"   r4   r>   r|   r5   r™   r#   r˜   r2   r3   r   r   r²   r   rF   ru   )rH   r6   rk   rê   rµ   r¸   r¹   Úbooking_objr)   r)   r*   r3   ž  s    D

zBookingLists.getNr¥   r)   r)   r)   r*   r  œ  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚBookingDetailszbooking_details.htmlr_   r‚   c                 C   s8   t jj|jjd ¡ }tjj|d ¡ }t|| jt	ƒ ƒS ©Nr„   r{   )
rc   r"   r4   r>   r|   r5   r™   r   rF   ru   )rH   r6   r|   rk   r  r)   r)   r*   r3   ¬  s    zBookingDetails.getNr¥   r)   r)   r)   r*   r  ª  s   r  c                 C   sŽ   t j ¡ }tdd}d|d< t |¡}| g d¢¡ |D ]P}| |j|jj	d |jj
 |jj	d |jj
 |j|j|jj|j|j|jg	¡ q8|S )Nútext/csv©Úcontent_typez"attachment; filename="booking.csv"úContent-Disposition)	úAppointment IdúFortuneteller Nameú	User NameúAppointment DateúAppointment TimeúService NamezService TypezAppointment StatusZPricer¬   )r™   r"   r#   r   ÚcsvÚwriterÚwriterowÚappointment_idrä   rÔ   rÕ   rÊ   Úappointment_dateÚappointment_timeÚservicerþ   Úservice_typerÇ   Úprice©r6   ÚquerysetÚresponser*  Úitemr)   r)   r*   ÚExportCSVBooking³  s    


Nr6  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditProfileDatabasezedit_profile_database.htmlr_   r‚   c                 C   sÀ   |j  d¡}tjj|jjd ¡ }|dkrFtjj|dd ¡ }|j	}nj|dkrjt
jj|dd ¡ }|j}nF|dkrŽtjj|dd ¡ }|j}n"|dkr°tjj|dd ¡ }|j}t|| jtƒ ƒS )	NÚprofiler„   Ú	horoscopeTrÄ   Úchinese_zodiacÚfive_elementÚmbti)r2   r3   rc   r"   r4   r>   r|   r5   Ú	Horoscoper9  ÚChineseZodiacr:  ÚFiveElementsÚelement_nameÚMBTIÚ	mbti_namer   rF   ru   )rH   r6   r|   Útab_namerk   Zprofile_objZtitle_valuer)   r)   r*   r3   Ã  s$    zEditProfileDatabase.getc              
   C   s&  zæ|j  d¡}td|ƒ |dkr*t}d}n4|dkr<t}d}n"|dkrNt}d}n|dkr^t}d}t |j ¡}| 	¡ rÖ|j
 d	¡}|j
 d
¡}|j
 d¡}	||d|d|	i}
|jj|djf i |
¤Ž t |d¡ tdƒW S t|| jƒW S W n: ty  } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )Nr8  útab_name====r9  r:  r;  r@  r<  rB  Úprofile_titleÚprofile_taglineÚprofile_descriptionÚtaglineÚdescriptionr{   rØ   úprofile-databaser¯   r   )rK   r3   rN   r=  r>  r?  rA  r   ZprofiledatabaseformrL   rM   r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rC  Ú
modal_nameÚmodal_fieldrJ   rE  rF  rG  Úupdate_datarº   r)   r)   r*   r8   Ú  s>    
ý
zEditProfileDatabase.postNrÜ   r)   r)   r)   r*   r7  Á  s   
r7  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚProfileDatabasezprofile_database.htmlr_   r‚   c              
   C   s8  zøt jj|jjd ¡ }tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjdd d¡}	t|	dƒ}|j	 
d¡}| |¡}
tjjdd d	¡}t|dƒ}|j	 
d
¡}| |¡}t|| jtƒ ƒW S  ty2 } z t |d¡ tdƒW  Y d }~S d }~0 0 d S ©Nr„   Tr…   r|   r­   r9  r:  r;  r‡   r<  r¯   r   )rc   r"   r4   r>   r|   r5   r=  r˜   r   r2   r3   r²   r>  r?  rA  r   rF   ru   r³   r
   r´   r   ©rH   r6   rk   Úhoroscope_objr¸   Úall_page_numberÚall_horoscope_objZchinese_zodiac_objZall_chinese_objZfive_elements_objZall_five_element_objÚmbti_objÚall_mbti_objrº   r)   r)   r*   r3     s,    







zProfileDatabase.getNr¥   r)   r)   r)   r*   rN    s   rN  c              
   C   s(  zæ| j dkrÔ| jd rÔ| jd }| j d¡}t|ƒ | ¡  d¡ ¡ }t 	|¡}d}|dkrà|D ]p}zD| j
j}tjj|d}|s°t | d|j› d	¡ td
ƒW   W S W n6 tyè   t | d|j› d	¡ td
ƒ Y   W S 0 d|vrt | d|j› d	¡ td
ƒ  W S d|vrFt | d|j› d	¡ td
ƒ  W S d|vrtt | d|j› d	¡ td
ƒ  W S tjj|d d ¡ }	|	r¸|d |	_|d |	_|d |	_|	 ¡  qht|d |d |d d}
|
 ¡  qhn¸|dkrl|D ]v}zF| j
j}tjj|d}|s8t | d|j› d	¡ td
ƒW   W S W n8 tyr   t | d|j› d	¡ td
ƒ Y   W S 0 d|vr¢t | d|j› d	¡ td
ƒ  W S d|vrÐt | d|j› d	¡ td
ƒ  W S d|vrþt | d|j› d	¡ td
ƒ  W S tjj|d d ¡ }	|	rB|d |	_|d |	_|d |	_|	 ¡  n"t|d |d |d d}| ¡  qîn,|dkrø|D ]v}zF| j
j}tjj|d}|sÄt | d|j› d	¡ td
ƒW   W S W n8 tyþ   t | d|j› d	¡ td
ƒ Y   W S 0 d|vr.t | d|j› d	¡ td
ƒ  W S d|vr\t | d|j› d	¡ td
ƒ  W S d|vrŠt | d|j› d	¡ td
ƒ  W S tjj|d d ¡ }	|	rÎ|d |	_|d |	_|d |	_|	 ¡  n"t|d |d |d d}| ¡  qzn |dkr‚|D ]v}zF| j
j}tjj|d}|sPt | d|j› d	¡ td
ƒW   W S W n8 tyŠ   t | d|j› d	¡ td
ƒ Y   W S 0 d|vrºt | d |j› d	¡ td
ƒ  W S d|vrèt | d|j› d	¡ td
ƒ  W S d|vrt | d|j› d	¡ td
ƒ  W S tjj|d d! ¡ }	|	rZ|d |	_|d |	_|d |	_|	 ¡  n"t|d |d |d d"}| ¡  qnt | d#¡ td
ƒW S |dkr¾t | |› d$¡ td
ƒW S t  | d%¡ td
ƒW S t  | d&¡ td
ƒW S  t!y" } z t "| d'¡ td(ƒW  Y d }~S d }~0 0 d S ))NrK   ÚmyFileInputÚ
active_tabúutf-8r   úhoroscope-tabr{   ú"Invalid user found. Error in line Ú.rJ  ú'User must be an integer. Error in line r=  z+horoscope is missing in csv. Error in line ÚTaglineú)tagline is missing in csv. Error in line ÚDescriptionú-description is missing in csv. Error in line )r9  )r9  rH  rI  ú
zodiac-tabzChinese Zodiacz0Chinese Zodiac is missing in csv. Error in line )r:  )r:  rH  rI  úelement-tabzFive Elementz.five element is missing in csv. Error in line )r@  )r@  rH  rI  úmbti-tabrA  z&mbti is missing in csv. Error in line )rB  )rB  rH  rI  úInvalid tab selected.ú" duplicate record(s) found in CSV.úUploaded successfullyr}   r¯   r   )#ÚmethodÚFILESrK   r3   rN   ÚreadÚdecodeÚ
splitlinesr)  Ú
DictReaderr>   r|   r   r"   r4   r
   r   Úline_numr   Ú
ValueErrorr=  r5   r9  rH  rI  rh   r>  r:  r?  r@  rA  rB  rO   r³   r´   ©r6   Úcsv_filerC  Údecoded_fileÚreaderÚduplicate_countÚrowr>   r€   Úexisting_profile_datarQ  Z
zodiac_objZelements_objrT  rº   r)   r)   r*   ÚimportProfileDataCSV+  s(   










ý








ý








ý








ý




rv  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditUserCompatibilityzedit_user_compatibility.htmlr_   r‚   c                 C   sâ   |j  d¡}td|ƒ tjj|jjd ¡ }|dkrVt	jj|dd ¡ }|j
}|j}n||dkr€tjj|dd ¡ }|j}|j}nR|dkrªtjj|dd ¡ }|j}|j}n(|d	krÒtjj|dd ¡ }|j}|j}t|| jtƒ ƒS )
NÚcompatibilityrD  r„   r9  TrÄ   r:  r;  r<  )r2   r3   rN   rc   r"   r4   r>   r|   r5   ÚCompatibilityHoroscopeÚfemale_horoscopeÚmale_horoscopeÚCompatibilityChineseZodiacÚfemale_chinese_zodiacÚmale_chinese_zodiacÚCompatibilityFiveElementsÚfemale_element_nameÚmale_element_nameÚCompatibilityMBTIÚfemale_mbti_nameÚmale_mbti_namer   rF   ru   )rH   r6   r|   rC  rk   Zcompatibility_objZfemale_valueZ
male_valuer)   r)   r*   r3     s.    
zEditUserCompatibility.getc              
   C   sZ  z|j  d¡}td|ƒ |dkr0t}d}d}n@|dkrFt}d}d}n*|d	kr\t}d
}d}n|dkrpt}d}d}t |j ¡}| 	¡ r
|j
 d¡}|j
 d¡}	|j
 d¡}
|j
 d¡}|j
 d¡}||||	d|
d|d|i}|jj|djf i |¤Ž t |d¡ tdƒW S t|| jƒW S W n: tyT } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )Nrx  rD  r9  rz  r{  r:  r}  r~  r;  r€  r  r<  rƒ  r„  ÚfemaleÚmaleÚcompatibility_scorerH  rI  r{   rØ   úuser-compatibilityr¯   r   )rK   r3   rN   ry  r|  r  r‚  r   ZusercompatibilityformrL   rM   r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rC  rK  Zfemale_modal_fieldZmale_modal_fieldrJ   r…  r†  r‡  rH  rI  rM  rº   r)   r)   r*   r8   %  sN    

û	
zEditUserCompatibility.postNrÜ   r)   r)   r)   r*   rw    s   
rw  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚUserCompatibilityzuser_compatibility.htmlr_   r‚   c              
   C   s8  zøt jj|jjd ¡ }tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjdd d¡}	t|	dƒ}|j	 
d¡}| |¡}
tjjdd d	¡}t|dƒ}|j	 
d
¡}| |¡}t|| jtƒ ƒW S  ty2 } z t |d¡ tdƒW  Y d }~S d }~0 0 d S rO  )rc   r"   r4   r>   r|   r5   ry  r˜   r   r2   r3   r²   r|  r  r‚  r   rF   ru   r³   r
   r´   r   rP  r)   r)   r*   r3   Z  s,    







zUserCompatibility.getNr¥   r)   r)   r)   r*   r‰  X  s   r‰  c              
   C   sT	  	z| j dkrü| jd rü| jd }| j d¡}t|ƒ | ¡  d¡ ¡ }t 	|¡}d}|dkrht
j ¡  ¡  |D ]ê}zD| jj}tjj|d}|s¾t | d|j› d	¡ td
ƒW   W S W n6 työ   t | d|j› d	¡ td
ƒ Y   W S 0 d|vr&t | d|j› d	¡ td
ƒ  W S d|vrTt | d|j› d	¡ td
ƒ  W S d|vr‚t | d|j› d	¡ td
ƒ  W S d|vr°t | d|j› d	¡ td
ƒ  W S d|vrÞt | d|j› d	¡ td
ƒ  W S t
jj|d |d |d |d |d dd ¡ }	|	r4|d7 }t | d|j› d	¡ qvt
|d |d |d |d |d d}
|
 ¡  qvnV|dkr~tj ¡  ¡  |D ]ò}zF| jj}tjj|d}|sÎt | d|j› d	¡ td
ƒW   W S W n8 ty   t | d|j› d	¡ tdƒ Y   W S 0 d|vr8t | d|j› d	¡ td
ƒ  W S d|vrft | d|j› d	¡ td
ƒ  W S d|vr”t | d|j› d	¡ td
ƒ  W S d|vrÂt | d|j› d	¡ td
ƒ  W S d|vrðt | d|j› d	¡ td
ƒ  W S tjj|d |d |d |d |d dd ¡ }	|	rH|d7 }t | d|j› d	¡ q„t|d |d |d |d |d d}| ¡  q„n@|dkr”tj ¡  ¡  |D ]ò}zF| jj}tjj|d}|sät | d|j› d	¡ td
ƒW   W S W n8 ty   t | d|j› d	¡ td
ƒ Y   W S 0 d|vrNt | d|j› d	¡ td
ƒ  W S d|vr|t | d|j› d	¡ td
ƒ  W S d|vrªt | d|j› d	¡ td
ƒ  W S d|vrØt | d|j› d	¡ td
ƒ  W S d|vrt | d|j› d	¡ td
ƒ  W S tjj|d |d |d |d |d dd  ¡ }	|	r^|d7 }t | d|j› d	¡ qšt|d |d |d |d |d d!}| ¡  qšn*|d"kr¨tj ¡  ¡  |D ]ò}zF| jj}tjj|d}|sút | d|j› d	¡ td
ƒW   W S W n8 ty4   t | d|j› d	¡ td
ƒ Y   W S 0 d|vrdt | d|j› d	¡ td
ƒ  W S d|vr’t | d|j› d	¡ td
ƒ  W S d|vrÀt | d|j› d	¡ td
ƒ  W S d|vrît | d|j› d	¡ td
ƒ  W S d|vrt | d|j› d	¡ td
ƒ  W S tjj|d |d |d |d |d dd# ¡ }	|	rt|d7 }t | d|j› d	¡ q°t|d |d |d |d |d d$}| ¡  q°nt | d%¡ td
ƒW S |dkrät | |› d&¡ td
ƒW S t | d'¡ td
ƒW S nt | d(¡ td
ƒW S W n: t	yN } z t | d)¡ td*ƒW  Y d }~S d }~0 0 d S )+NrK   rV  rW  rX  r   rY  r{   rZ  r[  rˆ  r\  ZFemalez(female is missing in csv. Error in line ZMalez&male is missing in csv. Error in line ÚScoreú'score is missing in csv. Error in line r]  r^  r_  r`  T)rz  r{  r‡  rH  rI  r†   r   úDuplicate data found in line )rz  r{  r‡  rH  rI  ra  rJ  )r}  r~  r‡  rH  rI  r†   )r}  r~  r‡  rH  rI  rb  )r€  r  r‡  rH  rI  r†   )r€  r  r‡  rH  rI  rc  )rƒ  r„  r‡  rH  rI  r†   )rƒ  r„  r‡  rH  rI  rd  re  rf  r}   r¯   r   )rg  rh  rK   r3   rN   ri  rj  rk  r)  rl  ry  r"   r#   Údeleter>   r|   r   r4   r
   r   rm  r   rn  r5   r´   rh   r|  r  r‚  rO   r³   ro  r)   r)   r*   ÚimportUserCompatibilityDataCSV}  s    








ú
	û






ú
û






ú
û






ú
û


rŽ  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditAdvisorsCompatibilityzedit_advisor_compatibility.htmlr_   r‚   c                 C   s‚   |j  d¡}td|ƒ tjj|jjd ¡ }|dkrPt	jj|dd ¡ }|j
}n"|dkrrtjj|dd ¡ }|j}t|| jtƒ ƒS )NÚadvisorrC  r„   r9  TrÄ   r<  )r2   r3   rN   rc   r"   r4   r>   r|   r5   ÚAdvisorCompatibilityHoroscoperH  ÚAdvisorCompatibilityMBTIÚtagline_for_relationshipr   rF   ru   )rH   r6   r|   rC  rk   Zadvisor_objrH  r)   r)   r*   r3   p  s    
zEditAdvisorsCompatibility.getc              
   C   s  zÒ|j  d¡}td|ƒ |dkr*t}d}n|dkr:t}d}t |j ¡}| ¡ rÂ|j d¡}|j d¡}|j d	¡}	|j d¡}
d|d|d	|	||
i}|j	j
|d
jf i |¤Ž t |d¡ tdƒW S t|| jƒW S W n: ty } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )NZadvisor_tabrD  r9  rH  r<  r“  r  r>   r‡  r{   rØ   úadvisor-compatibilityr¯   r   )rK   r3   rN   r‘  r’  r   ZadvisorscompatibilityformrL   rM   r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rC  rK  rL  rJ   r  r>   r‡  rH  rM  rº   r)   r)   r*   r8     s6    
ü
zEditAdvisorsCompatibility.postNrÜ   r)   r)   r)   r*   r  n  s   
r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚAdvisorsCompatibilityzadvisors_compatibility.htmlr_   r‚   c           
   
   C   sÎ   zt jj|jjd ¡ }tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}t|| jtƒ ƒW S  tyÈ }	 z t |d¡ td	ƒW  Y d }	~	S d }	~	0 0 d S )
Nr„   Tr…   r|   r­   r9  r<  r¯   r   )rc   r"   r4   r>   r|   r5   r‘  r˜   r   r2   r3   r²   r’  r   rF   ru   r³   r
   r´   r   )
rH   r6   rk   rQ  r¸   rR  rS  rT  rU  rº   r)   r)   r*   r3   §  s    



zAdvisorsCompatibility.getNr¥   r)   r)   r)   r*   r•  ¥  s   r•  c              
   C   s®  zl| j dkrZ| jd rZ| jd }| j d¡}t|ƒ | ¡  d¡ ¡ }t 	|¡}d}|dkr.t
j ¡  ¡  |D ]°}zD| jj}tjj|d}|s¾t | d|j› d	¡ td
ƒW   W S W n6 työ   t | d|j› d	¡ td
ƒ Y   W S 0 d|vr&t | d|j› d	¡ td
ƒ  W S d|vrTt | d|j› d	¡ td
ƒ  W S d|vr‚t | d|j› d	¡ td
ƒ  W S d|vr°t | d|j› d	¡ td
ƒ  W S t
jj|d |d |d |d dd ¡ }	|	r |d7 }t | d|j› d	¡ qvt
|d |d |d |d d}
|
 ¡  qvnð|dkrtj ¡  ¡  |D ]¸}zF| jj}tjj|d}|s”t | d|j› d	¡ td
ƒW   W S W n8 tyÎ   t | d|j› d	¡ td
ƒ Y   W S 0 d|vrþt | d|j› d	¡ td
ƒ  W S d|vr,t | d|j› d	¡ td
ƒ  W S d|vrZt | d|j› d	¡ td
ƒ  W S d|vrˆt | d|j› d	¡ td
ƒ  W S tjj|d |d |d |d dd ¡ }	|	rÚ|d7 }t | d|j› d	¡ qJt|d |d |d |d d}| ¡  qJnt | d¡ td
ƒW S |dkrDt | |› d¡ td
ƒW S t | d¡ td
ƒW S t | d ¡ td
ƒW S  ty¨ } z t | d!¡ td"ƒW  Y d }~S d }~0 0 d S )#NrK   rV  rW  rX  r   rY  r{   rZ  r[  r”  r\  ZAdvisorz)Advisor is missing in csv. Error in line r   z&User is missing in csv. Error in line rŠ  r‹  r]  r^  T)r  r>   r‡  rH  r†   r   rŒ  )r  r>   r‡  rH  rc  zTag Line for relationship)r  r>   r‡  r“  r†   )r  r>   r‡  r“  rd  re  rf  r}   r¯   r   )rg  rh  rK   r3   rN   ri  rj  rk  r)  rl  r‘  r"   r#   r  r>   r|   r   r4   r
   r   rm  r   rn  r5   r´   rh   r’  rO   r³   )r6   rp  rC  rq  rr  rs  rt  r>   r€   ru  rQ  rT  rº   r)   r)   r*   ÚimportAdvisorCompatibilityCSV¼  sÐ    







û
ü





û
ü




r–  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚAdminProfilezadmin_profile.htmlr_   r‚   c              
   C   sf   z(t jj|jjd ¡ }t|| jtƒ ƒW S  t	y` } z t
 |d¡ tdƒW  Y d }~S d }~0 0 d S )Nr„   r¯   r   )rc   r"   r4   r>   r|   r5   r   rF   ru   r³   r
   r´   r   )rH   r6   rk   rº   r)   r)   r*   r3   ;  s    zAdminProfile.getc           
   
   C   s  zÜt  |j¡}| ¡ rÌ|j d¡}|j d¡}|j d¡}|j d¡}|j d¡}tjj|j	j
dj|||||d |j d¡r¶t|j d¡ƒ}d	| }tjj|j	j
djt|ƒd
 t |d¡ tdƒW S t|| jƒW S W n: ty }	 z t |d¡ tdƒW  Y d }	~	S d }	~	0 0 d S )NrÔ   rÕ   r,   rÖ   Úaddressr„   )Ú	firstNameÚlastNamer,   ÚphoneNumberr˜  Zavatarr_   )Úimager  zadmin-profiler¯   r   )r   Zadminprofile_formrK   rL   rM   r3   rc   r"   r4   r>   r|   rÚ   rh  ZuploadTheImagesr'   r
   rO   r   r   rF   r³   r´   )
rH   r6   rJ   rÔ   rÕ   r,   rÖ   r˜  ZfileUrlrº   r)   r)   r*   r8   D  s&    "
zAdminProfile.postNrÜ   r)   r)   r)   r*   r—  9  s   
r—  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚContentPageListingzcontent_page_list.htmlr_   r‚   c              
   C   st   z6t jj|jjd ¡ }tjjdd}t|| jt	ƒ ƒW S  t
yn } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )Nr„   Tr…   r¯   r   ©rc   r"   r4   r>   r|   r5   ÚContentManagementr   rF   ru   r³   r
   r´   r   )rH   r6   rk   Úcontent_objrº   r)   r)   r*   r3   ]  s    zContentPageListing.getNr¥   r)   r)   r)   r*   r  [  s   r  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚUpdateContentPagezupdate_content_page.htmlr_   r‚   c              
   C   sx   z:t jj|jjd ¡ }tjj|d ¡ }t|| jt	ƒ ƒW S  t
yr } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )Nr„   r{   r¯   r   rž  )rH   r6   r|   rk   r   rº   r)   r)   r*   r3   j  s    zUpdateContentPage.getc              
   C   sœ   z^t  |j¡}| ¡ rN|j d¡}tjj|dj	|d t
 |d¡ tdƒW S t|| jƒW S W n8 ty– } z t
 |d¡ tdƒW  Y d }~S d }~0 0 d S )NÚcontentr{   )r7   r  zcontent-page-listingr¯   r   )r   Zupdatecontent_formrK   rL   rM   r3   rŸ  r"   r4   rÚ   r
   rO   r   r   rF   r³   r´   )rH   r6   r|   rJ   r¢  rº   r)   r)   r*   r8   t  s    
zUpdateContentPage.postNrÜ   r)   r)   r)   r*   r¡  h  s   
	r¡  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚRefundMoneyListzrefund_money_list.htmlr_   r‚   c                 C   s   t jj|jjd ¡ }tjjdd d¡}|j 	d¡}|j 	d¡}d}t
ƒ }|rzt|ƒ}tt |¡ƒ}	| t
|	dt
j¡ |rº| t
|d	t
|d
B t
|dB t
|dB t
|dB t
j¡ tjj|dd d¡}t|dƒ}
|j 	d¡}|
 |¡}t|| jtƒ ƒS )Nr„   Tr…   r‡   r¨   Úrefund_dater«   r  r  r  )Z)booking__seer_user__first_name__icontains)Z(booking__seer_user__last_name__icontains)Z)booking__service__service_name__icontainsr­   r®   )rc   r"   r4   r>   r|   r5   ÚAdminRefundRequestr˜   r2   r3   r   r'   r   r   r  r°   r±   r   r²   r   rF   ru   )rH   r6   rk   rê   rµ   r¤  r¶   r·   r  Zrefund_date_timer¸   r¹   Z
refund_objr)   r)   r*   r3   …  s"    <

zRefundMoneyList.getNr¥   r)   r)   r)   r*   r£  ƒ  s   r£  c                   @   s<   e Zd ZdZeeddƒdd„ ƒZeeddƒdd„ ƒZdS )	ÚRefundMoneyDetailszrefund_money_details.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjjd|d ¡ }t|| jt	ƒ ƒS )Nr„   T©r†   r|   )
rc   r"   r4   r>   r|   r5   r¥  r   rF   ru   )rH   r6   r|   rk   rê   r)   r)   r*   r3   ¢  s    zRefundMoneyDetails.getc                 C   sÚ  t jjd|d ¡ }|j d¡}|j}tjj|jj	d ¡ }|dkrð|j
dkrâtjj|jd ¡ }|j| }||_| ¡  d|_
t ¡ |_| ¡  tjjtƒ d	||j|dd
 tjjd|j d t|ƒ d	|jd t |d¡ nt |d¡ nâ|dkrÆtjj|d ¡ }	|	jr¸|j
dkrª|d }
tjt_tj j|	j|
d d|_
t ¡ |_| ¡  tjjtƒ d	||j|dd
 tjjd|j d t|ƒ d	|jd t |d¡ nt |d¡ nt |d¡ nt |d¡ t!dƒS )NTr§  Úrefund_typer{   ÚwalletrÅ   rÉ   Ú	CompletedÚrefund)r%   Útranscation_typeÚbookingrÊ   rˆ   Úpayment_modezYour refund for appointment ID:z% has been processed. Refund amount: $)r9   Únotification_typerÊ   zRefund to Wallet SuccessfulzAlready RefundedZaccount)r­  éd   )Zchargerˆ   zRefund to Account SuccessfulzJCharge ID is not provided. Cannot process the refund. Proceed with wallet.zInvalid Refund Typezrefund-money-list)"r¥  r"   r4   r5   rK   r3   Úrefund_amountr™   Úappointmentr|   r   ÚSeerUserWalletrÊ   rˆ   rh   r   ÚnowÚdate_processedr!   rö   r+   ÚSeerUserNotificationsr,  r'   r
   rO   r   Ú	charge_idr   ÚSTRIPE_SECRET_KEYÚstripeÚapi_keyZRefundr   )rH   r6   r|   rê   r¨  r±  Zappointment_objZuser_walletZ
new_amountZseer_user_transZexact_amountr)   r)   r*   r8   §  sD    


&

&zRefundMoneyDetails.postNrÜ   r)   r)   r)   r*   r¦     s
   
r¦  c                 C   sÄ   t jjdd}|s&t | d¡ tdƒS tdd}d|d< t |¡}| 	g d	¢¡ |D ]j}| 	|j
j|j
jjd
 |j
jj |j
jjd
 |j
jj |j
j|j
j|j
jjdt|j
jƒ |j
jdg	¡ qT|S )Nr«  )r¬  zNo data foundz/refund-money-listr  r   z!attachment; filename="refund.csv"r"  )	r#  r$  zCustomer Namer&  r'  r(  zRefund AmountzRefund DatezRefund Statusr¬   z$ rª  )r!   r"   r4   r
   r´   r   r   r)  r*  r+  r­  r,  rä   rÔ   rÕ   rÊ   r-  r.  r/  rþ   r'   r1  Ú
created_atr2  r)   r)   r*   ÚExportCSVRefundÖ  s(    


ø	r¼  c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚAdminLogoutr_   r‚   c                 C   s   t |ƒ t |d¡ tdƒS )NzLogout Succesfullyr_   )r	   r
   rO   r   rG   r)   r)   r*   r3   ï  s    zAdminLogout.getN©rQ   rR   rS   r   r   r3   r)   r)   r)   r*   r½  î  s   r½  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚAdminResetPasswordúadmin_reset_password.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS rí   rî   rï   r)   r)   r*   r3   ø  s    zAdminResetPassword.getc              
   C   s¶   zxt  |j¡}| ¡ rd|j d¡}tjj|jjd}| 	|¡ | 
¡  t|ƒ t |d¡ tdƒW S t|dd|iƒW S W n8 ty° } z t |d¡ tdƒW  Y d }~S d }~0 0 d S )	NZconfirmPasswordrA   z)You have successfully reset your passwordr_   rÀ  rJ   r¯   r   )r   Úchange_password_formrK   rL   r3   r   r"   r>   r,   r~   rh   r	   r
   Úinfor   r   r³   r´   )rH   r6   rJ   r<   r>   rº   r)   r)   r*   r8   ý  s    

zAdminResetPassword.postNrÜ   r)   r)   r)   r*   r¿  ö  s   
r¿  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚCancellationChargeúcancellation_charge.htmlr_   r‚   c                 C   s4   t jj|jjd ¡ }tj ¡  ¡ }t|| j	t
ƒ ƒS rí   )rc   r"   r4   r>   r|   r5   ÚGeneralSettingsr#   r   rF   ru   )rH   r6   rk   Zgeneral_objr)   r)   r*   r3     s    zCancellationCharge.getc                 C   s    t  |j¡}| ¡ rŒ|j d¡}|j d¡}|j d¡}tj ¡  	¡ }|rhtjj
|jdj|||d ntjj||d t |d¡ tdƒS t|d	d
|iƒS d S )NÚcancellation_chargeÚrefer_friend_offÚcommission_percentager{   )rÆ  rÇ  rÈ  )rÆ  rÇ  zCharges added succesfullyz/cancellation-chargerÄ  rJ   )r   ZgeneralsettingformrK   rL   rM   r3   rÅ  r"   r#   r5   r4   r|   rÚ   rö   r
   rO   r   r   )rH   r6   rJ   rÆ  rÇ  rÈ  Z
check_datar)   r)   r*   r8     s    zCancellationCharge.postNrÜ   r)   r)   r)   r*   rÃ    s   
rÃ  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚHelpSupportListzhelp_support_list.htmlr_   r‚   c              
   C   sÈ   zŠt jj|jjd ¡ }tj ¡  ¡ }tjjdd ¡ }tjjdd ¡ }tj ¡  	d¡}t
|dƒ}|j d¡}| |¡}	t|| jtƒ ƒW S  tyÂ }
 z t |d¡ td	ƒW  Y d }
~
S d }
~
0 0 d S )
Nr„   Tr   Fr‡   r­   r®   r¯   r   )rc   r"   r4   r>   r|   r5   ÚHelpSupportr#   r–   r˜   r   r2   r3   r²   r   rF   ru   r³   r
   r´   r   )rH   r6   rk   ÚtotalÚresolvedÚpendingÚhelp_objr¸   r¹   Úsup_objrº   r)   r)   r*   r3   -  s    

zHelpSupportList.getNr¥   r)   r)   r)   r*   rÉ  +  s   rÉ  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚHelpSupportViewzhelp_support_view.htmlr_   r‚   c                 C   s8   t jj|jjd ¡ }tjj|d ¡ }t|| jt	ƒ ƒS r  ©
rc   r"   r4   r>   r|   r5   rÊ  r   rF   ru   )rH   r6   r|   rk   rÏ  r)   r)   r*   r3   A  s    zHelpSupportView.getNr¥   r)   r)   r)   r*   rÐ  ?  s   rÐ  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚHelpSupportSendúhelp_support_send.htmlr_   r‚   c                 C   s8   t jj|jjd ¡ }tjj|d ¡ }t|| jt	ƒ ƒS r  rÑ  )rH   r6   r|   rk   Úhelpr)   r)   r*   r3   K  s    zHelpSupportSend.getc                 C   sÄ  t  |j¡}| ¡ r°|j d¡}|j d¡}|j d¡}td|||dœƒ}|}tj}	|}
t	j
|||	|
g|d tjj|dj|t ¡ dd	 tjj|d ¡ }|jr"|jj}ttjƒ}|jjd
kræddddœ}t|dj||d}|jjdkrœd}d}ddddœ}t|dj||||d}nz|jj}ttjƒ}|jjd
krbddddœ}t|dj||d}|jjdkrœd}d}ddddœ}t|dj||||d}t |d¡ tdƒS t|dd|iƒS d S )Nr,   rl   Úreplyzsupport_email.html)Z
reply_textr,   rl   ra   r{   T)rÕ  Ú
reply_dater   ZAndroidÚhelp_supportúHELP & SUPPORTz7You recived a mail for help and support from seer team.)ÚtypeÚtitler9   )rº  )Úregistration_idÚdata_messageZIos)rØ  )rÛ  Úmessage_titleÚmessage_bodyrÜ  zsend successfullyz/help-support-listrÓ  rJ   )r   ZsendsupportformrK   rL   rM   r3   r   r   ri   r   rj   rÊ  r"   r4   rÚ   r   r´  r5   rÊ   Ú	fcm_tokenr'   ÚFIREBASE_SERVER_KEYÚdevice_typer   Znotify_single_devicerä   r
   rO   r   r   )rH   r6   r|   rJ   r,   rl   rÕ  rb   rm   rn   ro   rÎ  rÛ  Z
server_keyrÜ  ÚresultrÝ  rÞ  r)   r)   r*   r8   Q  sh    

þþÿ
þþÿzHelpSupportSend.postNrÜ   r)   r)   r)   r*   rÒ  I  s   
rÒ  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚLifestyleQuestionListzlife_question_list.htmlr_   r‚   c           	      C   s”   t jj|jjd ¡ }tjjdd}|j d¡}t	ƒ }|rN| 
t	|dt	j¡ tjj|dd d¡}t|dƒ}|j d¡}| |¡}t|| jtƒ ƒS )	Nr„   Tr…   r¨   ©Zquestion_title__icontainsr‡   r­   r®   )rc   r"   r4   r>   r|   r5   ÚLifestyleQuestionr2   r3   r   r°   r±   r˜   r   r²   r   rF   ru   ©	rH   r6   rk   rê   rµ   r·   r¸   r¹   Zques_objr)   r)   r*   r3   Ž  s    

zLifestyleQuestionList.getNr¥   r)   r)   r)   r*   rã  Œ  s   rã  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚAddLifestyleQuestionúadd_lifestyle_question.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS rí   rî   ©rH   r6   r|   rk   r)   r)   r*   r3   Ÿ  s    zAddLifestyleQuestion.getc           	      C   s¶   t  |j¡}| ¡ r¢|j d¡}|j d¡}tjj|d}t	jj||d |j d¡rŽ|j d¡}t
 |¡}|D ]}|d }t	jj||d qpt |d¡ tdƒS t|dd	|iƒS d S )
NÚlifestyle_questionÚoption©Úquestion_title©rê  rë  úhidden-fieldúQuestion Added Successfullyú/lifestyle-questions-listrè  rJ   )r   ÚaddlifestyleformrK   rL   rM   r3   rå  r"   rö   ÚLifestyleOptionsÚjsonÚloadsr
   rO   r   r   )	rH   r6   rJ   rê  rë  Úlifestyle_objÚhidden_valueÚ	rows_datart  r)   r)   r*   r8   ¤  s    
zAddLifestyleQuestion.postNrÜ   r)   r)   r)   r*   rç    s   
rç  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditLifestyleQuestionúedit_lifestyle_question.htmlr_   r‚   c                 C   s`   t jj|jjd ¡ }tjj|d ¡ }tjj|d ¡ }tjj|ddd … }t|| j	t
ƒ ƒS )Nr„   r{   ©rê  r   )rc   r"   r4   r>   r|   r5   rå  ró  r   rF   ru   ©rH   r6   r|   rk   Zquestion_objZoption_obj_firstZ
option_objr)   r)   r*   r3   ¹  s
    zEditLifestyleQuestion.getc                 C   s  t  |j¡}| ¡ r |j d¡}|j d¡}tjj|dj	|d}tjj|d 
¡ }tjj|jd}|D ]}	|	 ¡  qjtjj||d |j d¡rìtjj|ddd … }
|
D ]}| ¡  q®|j d¡ d	¡}|D ]}|}tjj||d qÒt |d
¡ tdƒS t|dd|iƒS d S )Nrê  rë  r{   rì  rû  rî  úhidden-field-twor   ú,úQuestion Updated Successfullyrñ  rú  rJ   )r   rò  rK   rL   rM   r3   rå  r"   r4   rÚ   r5   ró  r|   r  rö   rt   r
   rO   r   r   )rH   r6   r|   rJ   rê  Úoption_datarö  Zlifestyle_mainÚoptions_objÚ
option_allÚvariation_objÚvarr÷  rt  r)   r)   r*   r8   Á  s*    


zEditLifestyleQuestion.postNrÜ   r)   r)   r)   r*   rù  ·  s   
rù  c                 C   s.   | j  d¡}tjj|d ¡ }| ¡  tdƒS ©NZ	option_idr{   rO   )r2   r3   ró  r"   r4   r5   r  r   ©r6   r7   Úmbit_objr)   r)   r*   ÚRemoveLifestyleOptionÙ  s    r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚMbtiQuestionListzmbit_question_list.htmlr_   r‚   c           	      C   sš   t jj|jjd ¡ }tjjdd d¡}|j 	d¡}t
ƒ }|rT| t
|dt
j¡ tjj|dd d¡}t|dƒ}|j 	d¡}| |¡}t|| jtƒ ƒS )	Nr„   Tr…   r‡   r¨   rä  r­   r®   )rc   r"   r4   r>   r|   r5   ÚMbtiQuestionr˜   r2   r3   r   r°   r±   r   r²   r   rF   ru   ræ  r)   r)   r*   r3   á  s    

zMbtiQuestionList.getNr¥   r)   r)   r)   r*   r	  ß  s   r	  c                   @   s<   e Zd ZdZeeddƒdd„ ƒZeeddƒdd„ ƒZdS )	ÚAddMbtiQuestionúadd_mbit_question.htmlr_   r‚   c                 C   s&   t jj|jjd ¡ }t|| jtƒ ƒS rí   rî   rï   r)   r)   r*   r3   ò  s    zAddMbtiQuestion.getc           	      C   s¶   t  |j¡}| ¡ r¢|j d¡}|j d¡}tjj|d}t	jj||d |j d¡rŽ|j d¡}t
 |¡}|D ]}|d }t	jj||d qpt |d¡ tdƒS t|dd	|iƒS d S )
NÚmbit_questionrë  rì  ©Úmbti_questionrë  rï  rð  z/mbit-questions-listr  rJ   )r   ÚaddMbitformrK   rL   rM   r3   r
  r"   rö   ÚMbtiOptionsrô  rõ  r
   rO   r   r   )	rH   r6   rJ   Úmbit_question_datarë  r  r÷  rø  rt  r)   r)   r*   r8   ÷  s    
zAddMbtiQuestion.postNrÜ   r)   r)   r)   r*   r  ð  s
   
r  c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditMbtiQuestionúedit_mbti_question.htmlr_   r‚   c                 C   s`   t jj|jjd ¡ }tjj|d ¡ }tjj|d ¡ }tjj|ddd … }t|| j	t
ƒ ƒS )Nr„   r{   ©r  r   )rc   r"   r4   r>   r|   r5   r
  r  r   rF   ru   rü  r)   r)   r*   r3     s
    zEditMbtiQuestion.getc                 C   s  t  |j¡}| ¡ r |j d¡}|j d¡}tjj|dj	|d}tjj|d 
¡ }tjj|jd}|D ]}	|	 ¡  qjtjj||d |j d¡rìtjj|ddd … }
|
D ]}| ¡  q®|j d¡ d	¡}|D ]}|}tjj||d qÒt |d
¡ tdƒS t|dd|iƒS d S )Nr  rë  r{   rì  r  r  rý  r   rþ  rÿ  z/mbti-questions-listr  rJ   )r   r  rK   rL   rM   r3   r
  r"   r4   rÚ   r5   r  r|   r  rö   rt   r
   rO   r   r   )rH   r6   r|   rJ   r  r   rT  Z	mbti_mainr  r  r  r  r÷  rt  r)   r)   r*   r8     s*    


zEditMbtiQuestion.postNrÜ   r)   r)   r)   r*   r  
  s   
r  c                 C   s.   | j  d¡}tjj|d ¡ }| ¡  tdƒS r  )r2   r3   r  r"   r4   r5   r  r   r  r)   r)   r*   ÚRemoveMbitOption3  s    r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚAdminNotificationsListzadmin_notifications.htmlr_   r‚   c                 C   sÆ   t jj|jjd ¡ }tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}tjjddd d¡}t|dƒ}|j	 
d	¡}| |¡}	tjjd
dd d¡}
t|
dƒ}|j	 
d¡}| |¡}t|| jtƒ ƒS )Nr„   Tr…   r‡   r­   Zall_pager   ©Úis_readr†   Z	read_pager   Zunread_page)rc   r"   r4   r>   r|   r5   ÚAdminNotificationsr˜   r   r2   r3   r²   r   rF   ru   )rH   r6   rk   Z
all_notifyr¸   rR  Zall_notify_objZread_notifyZread_page_numberZread_notify_objZunread_notifyZunread_page_numberZunread_notify_objr)   r)   r*   r3   <  s    





zAdminNotificationsList.getNr¥   r)   r)   r)   r*   r  :  s   r  c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )ÚReadAllNotificationsr_   r‚   c                 C   sR   t jj|jjd ¡ }tjjddd}|D ]}d|_| ¡  q*t	 
|d¡ tdƒS )Nr„   r   Tr  r   z%All notifications readed successfullyz/admin-notifications)rc   r"   r4   r>   r|   r5   r  r  rh   r
   rO   r   )rH   r6   rk   Z
notify_objÚnotifyr)   r)   r*   r3   U  s    
zReadAllNotifications.getNr¾  r)   r)   r)   r*   r  T  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )Ú
FaqListingzfaq_listing.htmlr_   r‚   c                 C   sZ   t jj|jjd ¡ }tjjdd d¡}t|dƒ}|j	 
d¡}| |¡}t|| jtƒ ƒS )Nr„   Tr…   r‡   r­   r®   )rc   r"   r4   r>   r|   r5   ÚFaqr˜   r   r2   r3   r²   r   rF   ru   )rH   r6   rk   rê   r¸   r¹   Úfaq_objr)   r)   r*   r3   a  s    

zFaqListing.getNr¥   r)   r)   r)   r*   r  _  s   r  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚAddFaqúadd_faq.htmlr_   r‚   c                 C   sl   t  |j¡}| ¡ r^|j d¡}|j d¡}|j d¡}tjj|||d t	 
|d¡ tdƒS t|dƒS d S )NrÚ  r¢  rÙ  ©rÚ  r¢  rÙ  zCreated Successfullyú/faq-listingr!  )r   Ú
addfaqformrK   rL   rM   r3   r  r"   rö   r
   rO   r   r   )rH   r6   rJ   rÚ  r¢  rÙ  r)   r)   r*   r8   n  s    zAddFaq.postN)rQ   rR   rS   rF   r   r   r8   r)   r)   r)   r*   r   l  s   r   c                   @   s.   e Zd ZdZeeddƒdd„ ƒZdd„ ZdS )	ÚEditFaqúedit_faq.htmlr_   r‚   c                 C   s:   t jj|jjd ¡ }tjj|dd ¡ }t|| jt	ƒ ƒS rÓ   )
rc   r"   r4   r>   r|   r5   r  r   rF   ru   )rH   r6   r|   rk   r  r)   r)   r*   r3     s    zEditFaq.getc                 C   st   t  |j¡}| ¡ rf|j d¡}|j d¡}|j d¡}tjj|dj	|||d t
 |d¡ tdƒS t|dƒS d S )	NrÚ  r¢  rÙ  r{   r"  zUpdated Successfullyr#  r&  )r   r$  rK   rL   rM   r3   r  r"   r4   rÚ   r
   rO   r   r   )rH   r6   r|   rJ   rÚ  r¢  rÙ  r)   r)   r*   r8   †  s    zEditFaq.postNrÜ   r)   r)   r)   r*   r%  }  s   
r%  c                   @   s"   e Zd Zeeddƒdd„ ƒZdS )Ú	DeleteFaqr_   r‚   c                 C   sD   t jj|jjd ¡ }tjj|djt 	¡ d t
 |d¡ tdƒS )Nr„   r{   )Úend_datezFaq Deleted Successfullyr#  )rc   r"   r4   r>   r|   r5   r  rÚ   r   r´  r
   rO   r   ré  r)   r)   r*   r3   ”  s    zDeleteFaq.getNr¾  r)   r)   r)   r*   r'  “  s   r'  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚUserReportszuser_reports.htmlr_   r‚   c           	   	   C   sÞ   t jj|jjd ¡ }tj ddddddd¡jt	d	ƒd
 
d	¡}|j d¡}tƒ }|r~| t|dt|dB t|dB tj¡ tj |¡ ddddddd¡jt	d	ƒd
 
d	¡}t|dƒ}|j d¡}| |¡}t|| jtƒ ƒS )Nr„   Úseer_user__idÚseer_user__first_nameÚseer_user__last_nameÚseer_user__emailÚseer_user__primary_imageÚseer_user__created_atÚseer_user__statusrÊ   ©Útotal_appointmentsr¨   )r+  )r,  )r-  r­   r®   ©rc   r"   r4   r>   r|   r5   r™   ÚvaluesÚannotater   r˜   r2   r3   r   r°   r±   r   r²   r   rF   ru   ©	rH   r6   rk   rê   rµ   r·   r¸   r¹   Zuser_appointmentsr)   r)   r*   r3   ž  s2    ÿþýÿ(ÿþýÿ

zUserReports.getNr¥   r)   r)   r)   r*   r)  œ  s   r)  c                   @   s   e Zd Zdd„ ZdS )ÚExportUserCsvReportc                 C   s¢   t j ddddddd¡jtdƒd	 d¡}td
d}d|d< t |¡}| 	g d¢¡ |D ]D}| 	|d |d d |d  |d |d |d |d |d g¡ qX|S )Nr*  r+  r,  r-  r.  r/  r0  rÊ   r1  r  r   z&attachment; filename="user_report.csv"r"  )zUser Idr%  ú
User Emailz
User ImagezUser Created DatezUser StatuszBooked Appointmentsr¬   r2  ©
r™   r"   r4  r5  r   r˜   r   r)  r*  r+  ©rH   r6   r3  r4  r*  r5  r)   r)   r*   r3   º  s    ÿþýÿ

BzExportUserCsvReport.getN©rQ   rR   rS   r3   r)   r)   r)   r*   r7  ¹  s   r7  c                   @   s   e Zd ZdZdd„ ZdS )ÚViewUserReportzview_user_report.htmlc                 C   s„   t jj|jjd ¡ }tjj|d}g d¢}g }dd l}|j 	¡ }|j
}	|D ]&}
tjj|	|
d|d ¡ }| |¡ qLt|| jtƒ ƒS )Nr„   rÉ   rŠ   r   T)rŒ   r   r†   rÊ   ©rc   r"   r4   r>   r|   r5   r™   r   r›   rœ   r“   r–   r   r   rF   ru   ©rH   r6   r|   rk   r    r¡   r¢   r   rœ   r“   r£   r¤   r)   r)   r*   r3   Ï  s    
zViewUserReport.getN©rQ   rR   rS   rF   r3   r)   r)   r)   r*   r<  Í  s   r<  c                   @   s&   e Zd ZdZeeddƒdd„ ƒZdS )ÚFortuneTellerReportszfortune_report.htmlr_   r‚   c           	   	   C   sÞ   t jj|jjd ¡ }tj ddddddd¡jt	d	ƒd
 
d	¡}|j d¡}tƒ }|r~| t|dt|dB t|dB tj¡ tj |¡ ddddddd¡jt	d	ƒd
 
d	¡}t|dƒ}|j d¡}| |¡}t|| jtƒ ƒS )Nr„   Úfortune_teller__idÚfortune_teller__first_nameÚfortune_teller__last_nameÚfortune_teller__emailÚfortune_teller__imageÚfortune_teller__created_atÚfortune_teller__statusrä   r1  r¨   )rB  )rC  )rD  r­   r®   r3  r6  r)   r)   r*   r3   ß  s2    ÿþýÿ(ÿþýÿ

zFortuneTellerReports.getNr¥   r)   r)   r)   r*   r@  Ý  s   r@  c                   @   s   e Zd ZdZdd„ ZdS )ÚViewFortuneTellerReportszview_fortune_report.htmlc                 C   s„   t jj|jjd ¡ }tjj|d}g d¢}g }dd l}|j 	¡ }|j
}	|D ]&}
tjj|	|
d|d ¡ }| |¡ qLt|| jtƒ ƒS )Nr„   rã   rŠ   r   T)rŒ   r   r†   rä   r=  r>  r)   r)   r*   r3   û  s    
zViewFortuneTellerReports.getNr?  r)   r)   r)   r*   rH  ù  s   rH  c                   @   s   e Zd Zdd„ ZdS )ÚExportFortuneCsvReportc                 C   s¢   t j ddddddd¡jtdƒd	 d¡}td
d}d|d< t |¡}| 	g d¢¡ |D ]D}| 	|d |d d |d  |d |d |d |d |d g¡ qX|S )NrA  rB  rC  rD  rE  rF  rG  rÊ   r1  r  r   ú/attachment; filename="fortuneteller_report.csv"r"  )zFortuneTeller IdzFortuneTeller NamezFortuneTeller EmailzFortuneTeller ImagezFortuneTeller Created DatezFortuneTeller StatuszAppointments Recivedr¬   r2  r9  r:  r)   r)   r*   r3   
	  s    ÿþýÿ

BzExportFortuneCsvReport.getNr;  r)   r)   r)   r*   rI  		  s   rI  c                   @   s   e Zd ZdZdd„ ZdS )ÚAllTranscationsReportszall_transcation_report.htmlc                 C   sV   t jj|jjd ¡ }tj ¡  d¡}t	|dƒ}|j
 d¡}| |¡}t|| jtƒ ƒS )Nr„   r‡   r­   r®   )rc   r"   r4   r>   r|   r5   r!   r#   r˜   r   r2   r3   r²   r   rF   ru   )rH   r6   rk   rê   r¸   r¹   r  r)   r)   r*   r3   	  s    

zAllTranscationsReports.getNr?  r)   r)   r)   r*   rK  	  s   rK  c                   @   s   e Zd Zdd„ ZdS )ÚExportTranscationReportCSVc              
   C   s¨   t jj|jjd ¡ }tj ¡  d¡}t	dd}d|d< t
 |¡}| g d¢¡ |D ]N}|jjdkrjd	}nd
}| |j|jjd |jj |jj|j|j|j|g¡ qT|S )Nr„   r‡   r  r   rJ  r"  )zTranscation IdZUsernamer8  zPayment ModeÚDateZAmountÚStatusr   rª  rÅ   r¬   )rc   r"   r4   r>   r|   r5   r!   r#   r˜   r   r)  r*  r+  r­  Úis_paidr%   rÊ   rÔ   rÕ   r,   r®  r»  rˆ   )rH   r6   rk   rê   r4  r*  r5  r   r)   r)   r*   r3   )	  s    

6zExportTranscationReportCSV.getNr;  r)   r)   r)   r*   rL  (	  s   rL  c                   @   s   e Zd Zdd„ ZdS )ÚGetCountriesc              
   C   sz   z2t jjdd d¡}t|ddj}td|dœƒW S  tyt } z*t|ƒ tdt	|ƒit
jdW  Y d }~S d }~0 0 d S )	NTr…   Úcountry_name©ÚmanyÚSuccess©r9   Údatar9   r   )Ú	Countriesr"   r4   r˜   ZCountrySerializerrV  r   r³   rN   r'   r   ÚHTTP_500_INTERNAL_SERVER_ERROR)rH   r6   Zcountry_objÚall_datarº   r)   r)   r*   r3   p	  s    zGetCountries.getNr;  r)   r)   r)   r*   rP  o	  s   rP  c                   @   s   e Zd Zdd„ ZdS )Ú	GetStatesc              
   C   s¤   z\|j }| d¡}|s*tdditjdW S tjj|dd d¡}t	|ddj
}td	|d
œƒW S  tyž } z*t|ƒ tdt|ƒitjdW  Y d }~S d }~0 0 d S )Nr|   r9   úid is requiredr   T)Úcountryr†   Ú
state_namerR  rT  rU  )Úquery_paramsr3   r   r   ÚHTTP_400_BAD_REQUESTÚStater"   r4   r˜   ZStateSerializerrV  r³   rN   r'   rX  )rH   r6   rV  Ú
country_idZ	state_objrY  rº   r)   r)   r*   r3   z	  s    
zGetStates.getNr;  r)   r)   r)   r*   rZ  y	  s   rZ  c                   @   s   e Zd Zdd„ ZdS )Ú	GetCitiesc              
   C   s¤   z\|j }| d¡}|s*tdditjdW S tjj|dd d¡}t	|ddj
}td	|d
œƒW S  tyž } z*t|ƒ tdt|ƒitjdW  Y d }~S d }~0 0 d S )Nr|   r9   r[  r   T)Ústater†   Ú	city_namerR  rT  rU  )r^  r3   r   r   r_  ÚCityr"   r4   r˜   ZCitySerializerrV  r³   rN   r'   rX  )rH   r6   rV  Ústate_idZcity_objrY  rº   r)   r)   r*   r3   ˆ	  s    
zGetCities.getNr;  r)   r)   r)   r*   rb  ‡	  s   rb  c                 C   s\   t  | ¡}tjjdd\}}| ¡ D ]2\}}tjj||d}|D ]}tjj||d q@q$d S )NZUSA)rQ  )r\  r]  )rc  rd  )	rô  rõ  rW  r"   Úget_or_createÚitemsr`  rö   re  )Ú	json_datarV  r\  Ú_r]  Úcitiesrc  rd  r)   r)   r*   Ú"create_states_and_cities_from_json˜	  s    
rl  c                 C   s¶   | j dkr¢zPd}t|dƒ}| ¡ }W d   ƒ n1 s80    Y  t|ƒ tddiddW S  ty|   tdd	id
d Y S  tjyž   tddidd Y S 0 ntddiddS d S )Nr2   zUS_States_and_Cities.jsonÚrr9   z(States and cities imported successfully.éÈ   r   r   zJSON file not found.i”  zInvalid JSON data in the file.i  zOnly POST requests are allowed.i•  )rg  Úopenri  rl  r   ÚFileNotFoundErrorrô  ÚJSONDecodeError)r6   Zjson_file_pathÚfileri  r)   r)   r*   Úimport_states_cities¤	  s    
&rs  )Údjango.shortcutsr   Zdjango.views.genericr   Údjango.views.generic.baser   r   r   Údjango.contrib.authr   r   r	   Údjango.contribr
   r;   r   Údjango.contrib.auth.modelsr   Údjango.httpr   Údjango.corer   ÚmathrU   rW   Údjango.confr   Údjango.template.loaderr   ÚmodelsÚseer_user.modelsZfortune_teller.modelsÚdjango.db.modelsr   r   Údjango.core.paginatorr   r)  Ú	functionsr   rô  Údjango.contrib.auth.decoratorsr   Údjango.utils.decoratorsr   rÍ   Údjango.utils.timezoner   r   ÚcalendarZpyfcmr   Úrest_framework.viewsr   Úrest_framework.responser   Úrest_frameworkr   Úserializersr¹  r+   r:   r?   rB   rC   rT   rp   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  r6  r7  rN  rv  rw  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)  r7  r<  r@  rH  rI  rK  rL  rP  rZ  rb  rl  rs  r)   r)   r)   r*   Ú<module>   sî   	

'
	E% \R% r7}"6
C")	G
