o
    ¿Ôiô"  ã                   @   sp   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S )é    )ÚFlaskÚrequestÚjsonify)ÚBcrypt)Úclosing)Úconnect_to_database)Úappc               
   C   sú  t  ¡ } g d¢}|D ]}|| vs| | s"td|› ddœƒdf  S q
tƒ }zÈzšt| ¡ ƒŠ}| d }| d|f¡ | ¡ }|d }|d u rL|› d	}nt|d
  	d¡d ƒ}|d }	|› d|	› }g }
g }|  
¡ D ]\}}|
 |¡ |dkr|s| d
¡ qj| |¡ qj|
 d¡ | |¡ d |
¡}d dgt|ƒ ¡}d|› d|› 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 tdddœƒdfS )N)Ú	fk_doctorÚfullnameÚdateOfbirthÚgenderÚageÚaddressÚphonenumberzMissing required field: Útrue©ÚmessageÚerroré  r	   zWSELECT patients_id FROM patients WHERE fk_doctor = %s ORDER BY patients_id DESC LIMIT 1iè  Z_1r   Ú_é   ZalcoholconsumptionZpatients_idú, z%szINSERT INTO  patients (z
) VALUES (ú)úInternal server error éô  zPatient created successfullyÚfalseéÉ   )r   Úget_jsonr   r   r   ÚcursorÚexecuteÚfetchoneÚintÚsplitÚitemsÚappendÚjoinÚlenÚcommitÚ	ExceptionÚrollbackÚclose)ÚdataZrequired_fieldsÚfieldÚ
connectionr   Z	doctor_idZlast_patient_idÚ
patient_idZlast_incrementZnew_incrementÚfieldsÚvaluesÚkeyÚvalueÚ
fields_strÚplaceholdersÚqueryÚe© r7   úJ/Users/harjaapdhillon/Desktop/newidea/medvista_backend/Services/Patient.pyÚpatient
   sV   ÿ




ß€#$
€û€r9   c               
      sè  t j d¡} t j d¡}t j d¡}t j d¡}t j d¡}t jjdtdd}t jjd	td
d}t j d¡}t j dd¡ ¡ }tƒ }	zzát|	 ¡ ƒÐ}
d}d}g }g }| r`| d¡ | | ¡ |rl| d¡ | |¡ |rx| d¡ | |¡ |r„| d¡ | |¡ |r| d¡ | |¡ |r¡dd 	|¡ }||7 }||7 }|
 
||¡ |
 ¡ d }|rñh d£}||vrÍtdddœƒdfW  d   ƒ W W |	 ¡  S |dvrçtdddœƒdfW  d   ƒ W W |	 ¡  S |d|› d|› 7 }|d
 | }|d 7 }| ||g¡ |
 
||¡ |
 ¡ }d!d"„ |
jD ƒ‰ W d   ƒ n	1 sw   Y  W n$ tyI } ztd#|› ddœƒd$fW  Y d }~W |	 ¡  S d }~ww W |	 ¡  n|	 ¡  w |rk‡ fd%d"„|D ƒ}t||d&d'œƒd(fS td)ddœƒd*fS )+NÚidr   r   Úemailidr	   Úlimité
   )ÚtypeÚdefaultÚpager   ÚorderbyÚsortÚASCz SELECT * FROM patients WHERE 1=1z'SELECT COUNT(*) FROM patients WHERE 1=1zid = %szgender = %szphonenumber = %szemailid = %szfk_doctor = %sz AND r   >   r   r   r;   r:   r   Údatetimer   zInvalid orderby columnr   r   r   >   rC   ZDESCzInvalid sort directionz
 ORDER BY ú z LIMIT %s OFFSET %sc                 S   ó   g | ]}|d  ‘qS ©r   r7   ©Ú.0Údescr7   r7   r8   Ú
<listcomp>ˆ   ó    zgetpatient.<locals>.<listcomp>r   r   c                    s   g | ]	}t tˆ |ƒƒ‘qS r7   )ÚdictÚzip)rI   Úrow©Úcolumn_namesr7   r8   rK      s    ÿr   )r+   Útotal_recordsr   éÈ   zNo data foundé”  )r   ÚargsÚgetr!   Úupperr   r   r   r$   r%   r   r    r   r*   ÚextendÚfetchallÚdescriptionr(   )r:   r   r   r;   r	   r<   r@   rA   rB   r-   r   r5   Úcount_queryÚ
conditionsr0   Zcondition_strrR   Zvalid_columnsÚoffsetÚresultr6   Úresults_with_column_namesr7   rP   r8   Ú
getpatientF   sŠ   









Ü
7ðØ
7óÎ€4$
€ý€
ÿr`   c               
   C   sð  t  ¡ } |  d¡}|stdddœƒdfS tƒ }zÑz£t| ¡ ƒ“}| d|f¡ | ¡ }|sCtdddœƒdfW  d   ƒ W W | 	¡  S g }g }|  
¡ D ]\}}|dkr`| |› d	¡ | |¡ qK|syt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 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 tdd|dœƒdfS )Nr:   úMissing patient IDr   r   r   ú%SELECT id FROM patients WHERE id = %súPatient not foundrT   z = %szNo fields to updatezUPDATE patients SET r   z WHERE id = %sz$SELECT * FROM patients WHERE id = %sc                 S   rF   rG   r7   rH   r7   r7   r8   rK   ¿   rL   z"update_patient.<locals>.<listcomp>r   r   zPatient updated successfullyr   )r   r   r+   rS   )r   r   rV   r   r   r   r   r   r    r*   r#   r$   r%   r'   rZ   rM   rN   r(   r)   )r+   r.   r-   r   Úpatient_existsr/   r0   r1   r2   r5   Zupdated_patientrQ   Zupdated_patient_datar6   r7   r7   r8   Úupdate_patient™   s^   
ÿù
%å
€ï
%
ïÿá€!$
€ü€re   c               
   C   sz  t  ¡ } |  d¡}|stdddœƒdfS tƒ }z—zit| ¡ ƒY}| d|f¡ | ¡ }|sCtdddœƒdfW  d   ƒ W W | 	¡  S | d	|f¡ | ¡ }|rftd
ddœƒdfW  d   ƒ W W | 	¡  S | d|f¡ | 
¡  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 tdddœƒdfS )Nr:   ra   r   r   r   rb   rc   rT   z,SELECT id FROM visits WHERE fk_patients = %sz.Details exist for this patient. Cannot delete.z"DELETE FROM patients WHERE id = %sr   r   zPatient deleted successfullyr   rS   )r   r   rV   r   r   r   r   r   r    r*   r'   r(   r)   )r+   r.   r-   r   rd   Zrelated_entriesr6   r7   r7   r8   Údelete_patientÍ   sH   
ÿù
òÿñ
ú
í€$
€ü€rf   N)Úflaskr   r   r   Úflask_bcryptr   Ú
contextlibr   Úconfr   r   Úbcryptr9   r`   re   rf   r7   r7   r7   r8   Ú<module>   s    <S4