o
    ȟ1if                     @   sZ   d dl m Z mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ G dd dZdS )	    )datetimetimezone)get_db)CoreDBErrorGenericError)WaitingListCourse)WaitingListResponseSchemac                   @   s@   e Zd Zdd Zdd ZdefddZdd	 Zdefd
dZdS )WaitingListServicec                 C   s   t  H}| }|d |d< |d |d< ztdi |}|| |  || |W W  d    S  tyJ } z|  td| d }~ww 1 sNw   Y  d S )Nid
created_by	user_typez#Could not create new waiting list:  )	r   
model_dumpr   addcommitrefresh	Exceptionrollbackr   )selfrequestuserdbpayloadZnew_waiting_lister   r   /app/services/waiting_list.pysave
   s"   


zWaitingListService.savec                 C   s,  t  }|ttjd }|jr |tj	t
j|jk}|jr0|tj	t
j|jk}| }g }|D ]J}||j|j|jj|jj|jj|jj|jj|jj|jj|jjj|jjj|jjj|jjj|jjjd|j|jj|jj|jj d|j!|j"|j#d q8|W  d    S 1 sw   Y  d S )N)	course_idcourse_nameacademic_year_idterm_idcourse_start_datecourse_end_datecourse_start_timecourse_end_timetermacademic_yearcourse_category	age_group	time_slotparticipant_idparticipant_first_nameparticipant_last_nameparticipant_emailr   courseparticipantprimary_contact_numberremarksis_enrolled)$r   queryr   where
deleted_atis_r   joinr0   filterr   r    allappendr   r   name
start_dateend_date
start_timeend_timer%   r&   titler'   r(   labelr)   r+   r1   
first_name	last_nameemailr2   r3   r4   )r   filtersr   r5   recordsdatarowr   r   r   fetch_filtered_waiting_list   sP   


$z.WaitingListService.fetch_filtered_waiting_listwaiting_list_idc                 C   s   t  a}|ttj|ktjd  }|stddd|j|j	|j
j|j
j|j
j|j
j|j
j|j
jj|j
jj|j
jj|j
jj|j
jjd|j|jj|jj|jjd|j|j|jdW  d    S 1 sgw   Y  d S )N  Waiting list not foundstatus_codeexc)r   r   r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r/   )r   r5   r   r6   r   r7   r8   firstr   r   r0   r=   r>   r?   r@   rA   r%   r&   rB   r'   r(   rC   r)   r+   r1   rD   rE   rF   r2   r3   r4   )r   rL   r   rJ   r   r   r   waiting_list_detailH   s@   

$z&WaitingListService.waiting_list_detailc                 C   s|   t  1}|ttj|ktjd  }|stdddt	
tj|_|  ddiW  d    S 1 s7w   Y  d S )NrM   rN   rO   messagez!Waiting list deleted successfully)r   r5   r   r6   r   r7   r8   rR   r   r   nowr   utcr   )r   rL   r   waiting_listr   r   r   delete_waiting_listo   s   $$z&WaitingListService.delete_waiting_listc                 C   s   t  ?}|ttj|ktjd  }|stddd|j	d ur'|j	|_	|j
d ur0|j
|_
|  || |W  d    S 1 sEw   Y  d S )NrM   rN   rO   )r   r5   r   r6   r   r7   r8   rR   r   r3   r4   r   r   )r   rL   r   r   rW   r   r   r   update_waiting_listz   s"   




$z&WaitingListService.update_waiting_listN)	__name__
__module____qualname__r   rK   intrS   rX   rY   r   r   r   r   r
      s    /'r
   N)r   r   core.configr   core.security.exceptionsr   r   modelsr   r   schema.waiting_listr	   r
   r   r   r   r   <module>   s    