o
    iB                     @   sT  d dl mZ d dlmZ d dlmZmZmZmZm	Z	m
Z
mZ d dlmZ de_ejdddgd	d
d Zejddgd	dd Zejddgd	dd Zeddd Zejddddd Zejddddd Zejdddd d! Zejd"d#dd$d% Zejd&d'dd(d) Zd*d+ Zd,d- Zd.d/ Zd0d1 Zd2d3 Zd4d5 Zd6d7 Zd8S )9    )closing)connect_to_database)render_templateredirectrequestflashjsonifysessionurl_for)appZyour_secret_keyz/admin_loginGETPOST)methodsc                  C   sh   t drttdS tjdkr0tjd} tjd}| dkr,|dkr,dt d< tdS td td	S )
Nauthenticatedadminr   usernamepasswordT/adminzInvalid username or passwordzadminLogin.html)	r	   getr   r
   r   methodformr   r   )r   r    r   H/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Admin.pyadmin_login	   s   

r   r   c                   C   s   t dsttdS tdS )Nr   r   z
index.html)r	   r   r   r
   r   r   r   r   r   r      s   
r   z/tablec                   C   s&   t dstd ttdS tdS )Nr   z)You must be logged in to access this pager   z
table.html)r	   r   r   r   r
   r   r   r   r   r   table$   s   
r   z/logoutc                   C   s    t dd  td ttdS )Nr   zYou have been logged outr   )r	   popr   r   r
   r   r   r   r   logout-   s   r   z/admin/doctorZdoctor_view)endpointc                   C      t dS )Nzsection/doctor.htmlr   r   r   r   r   doctor4      r    z/admin/patientZpatient_viewc                   C   r   )Nzsection/patient.htmlr   r   r   r   r   patient9   r!   r"   z/admin/userZ	user_viewc                   C   r   )Nzsection/user.htmlr   r   r   r   r   user>   r!   r#   z/admin/appointmentZappointment_viewc                   C   r   )Nzsection/appointment.htmlr   r   r   r   r   appointmentC   r!   r$   z/admin/userlogZuserlog_viewc                   C   r   )Nzsection/userlog.htmlr   r   r   r   r   userlogH   r!   r%   c               
        t  } zz~t|  n}ttjdd}tjdd}tjdd }|dvr+d}|dkr1d}d	| d
| }d| d}|| |	 d }ttjd|}|d| d|d |  7 }|| |
 }	dd |jD  W d    n1 s|w   Y  W n# ty }
 ztd|
 dddfW  Y d }
~
W |   S d }
~
ww W |   n|   w |	rӇ fdd|	D }t|||||| || rdnd dddfS tddddfS )Npage   sort_byid
sort_orderascr,   desc z,select * from users where role = 2 ORDER BY  SELECT COUNT(*) FROM (	) AS tempr   per_page LIMIT  OFFSET c                 S      g | ]}|d  qS r   r   .0r.   r   r   r   
<listcomp>q       zget_doctor.<locals>.<listcomp>Internal server error truemessageerror  c                       g | ]	}t t |qS r   dictzipr9   rowcolumn_namesr   r   r:   y       falsedataZpage_numberr3   total_recordsZtotal_pagesr@      No data found  r   r   cursorintr   argsr   lowerexecutefetchonefetchalldescription	Exceptionr   close
connectionrS   r'   r)   r+   queryZcount_queryrN   r3   resulteZresults_with_column_namesr   rH   r   
get_doctorR   ^   

$

	rb   c               
      r&   )Nr'   r(   r)   r*   r+   r,   r-   r/   zselect * from users ORDER BY r0   r1   r2   r   r3   r4   r5   c                 S   r6   r7   r   r8   r   r   r   r:      r;   zget_users.<locals>.<listcomp>r<   r=   r>   rA   c                    rB   r   rC   rF   rH   r   r   r:      rJ   rK   rL   rO   rP   rQ   rR   r]   r   rH   r   	get_users   rc   rd   c               
      r&   )Nr'   r(   r)   r*   r+   r,   r-   r/   zSELECT * FROM visits ORDER BY r0   r1   r2   r   r3   r4   r5   c                 S   r6   r7   r   r8   r   r   r   r:      r;   zget_visits.<locals>.<listcomp>r<   r=   r>   rA   c                    rB   r   rC   rF   rH   r   r   r:      rJ   rK   rL   rO   rP   rQ   rR   r]   r   rH   r   
get_visits   rc   re   c               
      s  t  } zzt|  o}ttjdd}tjdd}tjdd }|dvr+d}|dkr1d}d	| d
| d}d| d}|| |	 d }ttjd|}|d| d|d |  7 }|| |
 }	dd |jD  W d    n1 s}w   Y  W n# ty }
 ztd|
 dddfW  Y d }
~
W |   S d }
~
ww W |   n|   w |	rԇ fdd|	D }t|||||| || rdnd dddfS tddddfS )Nr'   r(   r)   r*   r+   r,   r-   r/   a  
                SELECT 
                    patients.id,
                    patients.fullname,
                    patients.dateOfbirth,
                    patients.gender,
                    patients.age,
                    patients.address,
                    patients.phonenumber,
                    patients.emailid,
                    patients.lifestyle,
                    patients.diet,
                    patients.tobaccouse,
                    patients.alcoholconsumption,
                    patients.dietandexercisehabits,
                    patients.pastmedicalconditions,
                    patients.allergies,
                    patients.medications,
                    patients.familymedicalhistory,
                    patients.comments,
                    patients.datetime,
                    patients.patients_id,
                    CONCAT(users.firstname, ' ', users.lastname) AS doctor_name,
                    llx_c_country.label AS country_name
                FROM patients
                LEFT JOIN users ON patients.fk_doctor = users.id
                LEFT JOIN llx_c_country ON patients.fk_country = llx_c_country.id
                ORDER BY r0   z
            r1   r2   r   r3   r4   r5   c                 S   r6   r7   r   r8   r   r   r   r:   +  r;   zget_patient.<locals>.<listcomp>r<   r=   r>   rA   c                    rB   r   rC   rF   rH   r   r   r:   3  rJ   rK   rL   rO   rP   rQ   rR   r]   r   rH   r   get_patient   s^   

8$

	rf   c               
   C   ,  t jd} t jd}t jdd}|dvr tdddd	fS zXt }| }d
}|||g}| r>|r>|d7 }|| |g |d7 }||| | }g }g }	|D ]}
|	|
d  |		|
d  qRd|||	dd}|
  |
  t|W S  ty } ztdt|ddfW  Y d }~S d }~ww )N
start_dateend_dategroup_bydayrk   monthyearr@   Invalid group_by parameterstatusr?     aE  
            SELECT 
                COUNT(id) as visit_count,
                CASE 
                    WHEN %s = 'day' THEN DATE(visitdate)
                    WHEN %s = 'month' THEN MONTHNAME(visitdate)
                    WHEN %s = 'year' THEN YEAR(visitdate)
                END as label
            FROM visits
        z!WHERE visitdate BETWEEN %s AND %s GROUP BY labelr(   r   success)rj   labelsZvisit_countrq   rM   rA   r   rU   r   r   r   rS   extendrW   rY   appendr\   r[   strrh   ri   rj   connrS   r_   paramsresultsru   Zvisit_countsrG   responsera   r   r   r   get_admin_visits_statisticsA  sD   
	
"r   c               
   C   rg   )Nrh   ri   rj   rk   rl   r@   ro   rp   rr   aS  
            SELECT 
                COUNT(id) as users_count,
                CASE 
                    WHEN %s = 'day' THEN DATE(createdatetime)
                    WHEN %s = 'month' THEN MONTHNAME(createdatetime)
                    WHEN %s = 'year' THEN YEAR(createdatetime)
                END as label
            FROM users
        z&WHERE createdatetime BETWEEN %s AND %srs   r(   r   rt   )rj   ru   Zusers_countrv   rA   rw   )rh   ri   rj   r|   rS   r_   r}   r~   ru   Zusers_countsrG   r   ra   r   r   r   get_admin_users_statistics  sH   
	
"r   c               
   C   rg   )Nrh   ri   rj   rk   rl   r@   ro   rp   rr   aG  
            SELECT 
                COUNT(id) as patients_count,
                CASE 
                    WHEN %s = 'day' THEN DATE(datetime)
                    WHEN %s = 'month' THEN MONTHNAME(datetime)
                    WHEN %s = 'year' THEN YEAR(datetime)
                END as label
            FROM patients
        z WHERE datetime BETWEEN %s AND %srs   r(   r   rt   )rj   ru   Zpatients_countrv   rA   rw   r{   r   r   r   get_admin_patients_statistics  sH   
	
"r   N)
contextlibr   confr   flaskr   r   r   r   r   r	   r
   r   
secret_keyrouter   r   r   r   r    r"   r#   r$   r%   rb   rd   re   rf   r   r   r   r   r   r   r   <module>   s<    $








	565O>A