o
    iD                     @   s   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
 ee
Zdd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )    )Flaskrequestjsonify)Bcrypt)closing)connect_to_database)appc               
   C   sr  t  } g d}|D ]}|| vs| | s"td| dddf  S q
t }zzVt| F}g }g }|  D ]\}}|dkr@q7|| || q7d|}	ddgt	| }
d	|	 d
|
 d}|
|| |  W d    n1 sww   Y  W n' ty } z|  td| dddfW  Y d }~W |  S d }~ww W |  n|  w tddddfS )N)fk_patients	fk_doctor	visitdateZreasonforvisitZsymptomsMissing required field: truemessageerror   , %sINSERT INTO visits (
) VALUES ()Internal server error   z#Patient visits created successfullyfalse   )r   get_jsonr   r   r   cursoritemsappendjoinlenexecutecommit	Exceptionrollbackclose)datarequired_fieldsfield
connectionr   fieldsvalueskeyvalue
fields_strplaceholdersquerye r3   I/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Visits.pyvisits	   s@   


$
r5   c               
      s
  t jd} t jd}t jd}t jd}t jd}t jjddd}t jjd	td
d}t jjdtdd}t jd}t jdd }	t }
zzt|
 }d}d}g }g }| rh|d ||  |rt|d || |r|d || |r|d || |r|d || |rdd	| }||7 }||7 }|
|| | d }|rh d}||vrtd| dddfW  d    W W |
  S |	dvrtd |	 dddfW  d    W W |
  S |d!| d"|	 7 }|s|d | }|d#7 }|||g |
|| | }d$d% |jD  W d    n	1 s0w   Y  W n$ tyZ } ztd&| ddd'fW  Y d }~W |
  S d }~ww W |
  n|
  w |r| fd(d%|D }t||d)d*d+fS td,ddd-fS ).Nidr	   r
   r   statusallF)defaultlimit
   )typer9   page   orderbysortASCaM
  
            SELECT 
                p.id AS patient_id,
                p.patients_id AS patients_id,
                p.fk_doctor AS patient_fk_doctor,
                p.fullname AS patient_fullname,
                p.dateOfbirth AS patient_dateOfbirth,
                p.gender AS patient_gender,
                p.age AS patient_age,
                p.address AS patient_address,
                p.phonenumber AS patient_phonenumber,
                p.emailid AS patient_emailid,
                p.lifestyle AS patient_lifestyle,
                p.diet AS paitent_diet,
                p.tobaccouse AS patient_tobaccouse,
                p.alcoholconsumption AS patient_alcoholconsumption,
                p.dietandexercisehabits AS patient_dietandexercisehabits,
                p.pastmedicalconditions AS patient_pastmedicalconditions,
                p.allergies AS patient_allergies,
                p.medications AS patient_medications,
                p.familymedicalhistory AS patient_familymedicalhistory,
                p.datetime AS patient_datetime,
                v.id AS visit_id,
                v.visitdate AS visit_visitdate,
                v.reasonforvisit AS visit_reasonforvisit,
                v.symptoms AS visit_symptoms,
                v.bloodpressure AS visit_bloodpressure,
                v.bodytemprature AS visit_bodytemprature,
                v.height AS visit_height,
                v.weight AS visit_weight,
                v.BMI AS visit_BMI,
                v.status AS visit_status,
                v.possible_cause AS visit_possible_cause,
                v.diagnostics AS visit_diagnostics,
                v.medications AS visit_medications,
                v.glucoselevel AS visit_glucoselevel,
                v.pulseoximetry AS visit_pulseoximetry,
                v.recentillnessesorinjuries AS visit_recentillnessesorinjuries,
                v.additionalnotesorcomments AS visit_additionalnotesorcomments,
                v.follow_up AS visit_follow_up,
                v.food_type AS visit_food_type,
                v.diet AS visit_diet,
                u.id AS doctor_id,
                u.email AS doctor_email,
                u.firstname AS doctor_firstname,
                u.lastname AS doctor_lastname,
                u.phone AS doctor_phone,
                u.createdatetime AS doctor_createdatetime,
                u.modifieddatetime AS doctor_modifieddatetime
            FROM 
                patients p
            JOIN 
                visits v ON p.id = v.fk_patients
            JOIN 
                users u ON p.fk_doctor = u.id
            WHERE 1=1
            z
            SELECT COUNT(*)
            FROM 
                patients p
            JOIN 
                visits v ON p.id = v.fk_patients
            JOIN 
                users u ON p.fk_doctor = u.id
            WHERE 1=1
            z	v.id = %szv.fk_patients = %szp.fk_doctor = %szv.visitdate = %szv.status = %sz AND r   >'   Zdoctor_firstnameZvisit_reasonforvisitZpatient_dateOfbirthZpatient_addressZ	visit_BMIZvisit_glucoselevelZpatient_alcoholconsumptionZvisit_weightZdoctor_email	doctor_idZdoctor_phoneZdoctor_modifieddatetimeZpatient_fullnameZpatient_dietandexercisehabitsZvisit_create_datetimeZvisit_bloodpressureZpatient_emailidZpatient_genderZvisit_recentillnessesorinjuriesZdoctor_lastnamevisit_idZpatient_allergies
patient_idZvisit_symptomsZpatient_phonenumberZpatient_ageZvisit_visitdateZpatient_familymedicalhistoryZpatient_fk_doctorZvisit_heightZvisit_statusZpatient_pastmedicalconditionsZvisit_modified_datetimeZvisit_additionalnotesorcommentsZdoctor_createdatetimeZpatient_medicationsZvisit_pulseoximetryZpatient_tobaccouseZpatient_datetimezInvalid orderby column r   r   r   >   rA   DESCzInvalid sort direction z
 ORDER BY  z LIMIT %s OFFSET %sc                 S      g | ]}|d  qS r   r3   .0descr3   r3   r4   
<listcomp>       zgetvisits.<locals>.<listcomp>r   r   c                    s   g | ]	}t t |qS r3   )dictzip)rJ   rowcolumn_namesr3   r4   rL      s    r   )r'   total_recordsr      zNo data found  )r   argsgetintupperr   r   r   r   r    r"   fetchoner   r&   extendfetchalldescriptionr$   )r6   r	   r
   r   r7   r8   r:   r=   r?   r@   r*   r   r1   count_query
conditionsr,   condition_strrS   valid_columnsoffsetresultr2   results_with_column_namesr3   rQ   r4   	getvisits6   s   :










 
 
 $

re   c               
   C   s  t  } | d}|stddddfS t }zzt| }|d|f | }|sCtddddfW  d    W W |	  S g }g }| 
 D ]\}}|d	krTqK|dkre|| d
 || qK|s~tddddfW  d    W W |	  S || dd| d}	||	| |  |d|f | }
dd |jD }tt||
}W d    n1 sw   Y  W n' ty } z|  td| dddfW  Y d }~W |	  S d }~ww W |	  n|	  w tdd|ddfS )Nr6   zMissing Visits patient IDr   r   r   #SELECT id FROM visits WHERE id = %szPatient Visits not foundrU   r   z = %szNo fields to updatezUPDATE visits SET r   z WHERE id = %sz"SELECT * FROM visits WHERE id = %sc                 S   rG   rH   r3   rI   r3   r3   r4   rL      rM   z!update_visits.<locals>.<listcomp>r   r   z#Patient Visits updated successfullyr   )r   r   r'   rT   )r   r   rW   r   r   r   r   r"   rZ   r&   r   r   r    r#   r]   rN   rO   r$   r%   )r'   rC   r*   r   visit_existsr+   r,   r-   r.   r1   Zupdated_visitsrR   Zupdated_visit_datar2   r3   r3   r4   update_visits   sZ   

$

$
 $
rh   c               
   C   s4  t  } | d}|stddddfS t }ztzFt| 6}|d|f | }|sCtddddfW  d    W W |	  S |d	|f |
  W d    n1 sXw   Y  W n' ty } z|  td
| dddfW  Y d }~W |	  S d }~ww W |	  n|	  w tddddfS )Nr6   zMissing visits IDr   r   r   rf   zVisits not foundrU   z DELETE FROM visits WHERE id = %sr   r   zVisits deleted successfullyr   rT   )r   r   rW   r   r   r   r   r"   rZ   r&   r#   r$   r%   )r'   rC   r*   r   Zvisits_existsr2   r3   r3   r4   delete_visits
  s4   


$
ri   c               
   C   s  t  } | d}| d}|r|d u rtddddfS t }zTz&t| }d}||d|f |  W d    n1 sAw   Y  W n' t	yn } z|
  td	| ddd
fW  Y d }~W |  S d }~ww W |  n|  w tddddfS )NrC   possible_causeMissing required datar   r   r   z3UPDATE visits SET possible_cause = %s WHERE id = %sr>   Internal server error: r   z$Possible cause updated successfully.r   rT   r   r   rW   r   r   r   r   r"   r#   r$   r%   r&   )r'   rC   rj   r*   r   r1   r2   r3   r3   r4   update_possible_cause_flag&  ,   


$
rn   c               
   C     t  } | d}| d}|r|d u rtddddfS t }zTz&t| }d}||||f |  W d    n1 sAw   Y  W n' t	yn } z|
  td| ddd	fW  Y d }~W |  S d }~ww W |  n|  w td
dddfS )NrC   diagnosticsrk   r   r   r   z0UPDATE visits SET diagnostics = %s WHERE id = %srl   r   z!Diagnostics updated successfully.r   rT   rm   )r'   rC   rq   r*   r   r1   r2   r3   r3   r4   update_diagnostics_flag@  ro   rr   c               
   C   rp   )NrC   medicationsrk   r   r   r   z0UPDATE visits SET medications = %s WHERE id = %srl   r   z!Medications updated successfully.r   rT   rm   )r'   rC   rs   r*   r   r1   r2   r3   r3   r4   update_medications_flagZ  ro   rt   c               
   C   rp   )NrC   	food_typerk   r   r   r   z.UPDATE visits SET food_type = %s WHERE id = %srl   r   z$food_type flag updated successfully.r   rT   rm   )r'   rC   ru   r*   r   r1   r2   r3   r3   r4   update_food_type_flagt  ro   rv   c               
   C   rp   )NrC   dietrk   r   r   r   z)UPDATE visits SET diet = %s WHERE id = %srl   r   zdiet flag updated successfully.r   rT   rm   )r'   rC   rw   r*   r   r1   r2   r3   r3   r4   update_diet_flag  ro   rx   c               
   C   s  t  } g d}|D ]}|| vs| | s"td| dddf  S q
t }zzt| }|d| d | d | d	 f | }|sZtd
dddfW  d    W W |  S dd |j	D }g }g }t
|D ]\}	}
|
|vr~||
 |||	  qj|  D ]\}}||vr|dkr|| || qd|}ddgt| }d| d| d}||| |  W d    n1 sw   Y  W n' ty } z|  td| dddfW  Y d }~W |  S d }~ww W |  n|  w tddddfS )N)r6   r	   r
   r   r   r   r   r   zJSELECT * FROM visits WHERE id = %s AND fk_patients = %s AND fk_doctor = %sr6   r	   r
   zVisit not foundrU   c                 S   rG   rH   r3   rI   r3   r3   r4   rL     rM   znextVisit.<locals>.<listcomp>r   r   r   r   r   rl   r   z"Patient visit created successfullyr   r   )r   r   r   r   r   r   r"   rZ   r&   r]   	enumerater   r   r    r!   r#   r$   r%   )r'   r(   r)   r*   r   rg   columnsr+   r,   icolumnr-   r.   r/   r0   r1   r2   r3   r3   r4   	nextVisit  s\   
&




"$
r}   N)flaskr   r   r   flask_bcryptr   
contextlibr   confr   r   bcryptr5   re   rh   ri   rn   rr   rt   rv   rx   r}   r3   r3   r3   r4   <module>   s"    - "3