
    2j                    *   d dl mZ d dlmZ d dlmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZmZ d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZmZmZmZmZ  e            Z  ed
d           ee          fd:dZ! G d de          Z" G d de          Z# G d de          Z$ G d de          Z%e &                    d           e
d           e
ddd !           ee          fd;d&            Z'e (                    d'd()           ee!           ee          fd<d,            Z)e *                    d-           ee!           ee          fd=d/            Z+e ,                    d-           ee!           ee          fd>d0            Z-e &                    d1           ee!           ee          fd?d2            Z.e (                    d1d()           ee!           ee          fd@d3            Z/e *                    d4           ee!           ee          fdAd6            Z0e (                    d7           ee!           ee          fdBd8            Z1e ,                    d4           ee!           ee          fdBd9            Z2d
S )C    )annotations)date)	APIRouterDependsHeaderHTTPExceptionQuery)	BaseModelField)Sessionselect)get_session)CalendarEventChildExam
ExamStatusget_admin_session)build_calendarcancel_exam_study_plangenerate_study_planserialize_calendar_eventserialize_examNzX-Admin-Session)defaultaliasx_admin_session
str | Nonesessionr   returnNonec                &    t          ||            d S Nr   )r   r   s     @/home/agent/projects/FamilyDashboard/backend/app/api/calendar.pyrequire_adminr$      s     g/////    c                      e Zd ZU ded<    edd          Zded<    edd          Zded	<   d
ed<    eddd          Zded<   dZded<   dS )
ExamCreateintchild_id   P   
min_length
max_lengthstrsubject   topicdt_date	exam_date   r   
   r   gelestudy_sessionsFboolinclude_weekendsN)	__name__
__module____qualname____annotations__r   r0   r2   r:   r<    r%   r#   r'   r'      s         MMM5A"555G5555!444E4444%aB777N7777"""""""r%   r'   c                      e Zd ZU  eddd          Zded<    eddd          Zded<   dZd	ed
<    eddd          Zded<   dZ	ded<   dZ
ded<   dS )
ExamUpdateNr*   r+   r   r-   r.   r   r0   r1   r2   dt_date | Noner4   r   r6   r7   
int | Noner:   bool | Noner<   zExamStatus | Nonestatus)r=   r>   r?   r   r0   r@   r2   r4   r:   r<   rH   rA   r%   r#   rC   rC   !   s         %rJJJGJJJJdqSIIIEIIII $I$$$$!&tb!A!A!ANAAAA$((((( $F$$$$$$r%   rC   c                      e Zd ZU ded<    edd          Zded<    edd	
          Zded<   dZded<    edd
          Zded<    edd
          Z	ded<   dS )CalendarEventCreater3   r   r*   r1   r,   r/   title   r   r.   descriptionNrF   r)      r   icon    color)
r=   r>   r?   r@   r   rK   rO   r)   rQ   rS   rA   r%   r#   rJ   rJ   *   s         MMM!444E4444uRC888K8888HuTb999D9999dr:::E::::::r%   rJ   c                      e Zd ZU dZded<    eddd          Zded<    edd	
          Zded<   dZded<    edd
          Z	ded<    edd
          Z
ded<   dZded<   dS )CalendarEventUpdateNrE   r   r*   r1   rD   r   rK   rM   rN   rO   rF   r)   rP   rQ   rR   rS   rG   active)r=   r>   r?   r   r@   r   rK   rO   r)   rQ   rS   rV   rA   r%   r#   rU   rU   3   s         DdqSIIIEIIII#eDSAAAKAAAAHuTb999D9999dr:::E::::Fr%   rU   z	/calendar.r5   r*      r7   startr3   weeksr(   c                $    t          || |          S r"   )r   )rX   rY   r   s      r#   get_calendarr[   =   s     '5%000r%   z/admin/calendar-events   )status_codepayload_c           	        | j         6|                    t          | j                   t          dddddi          t	          | j        | j        | j        | j         | j        | j	        d          }|
                    |           |                                 |                    |           |j         r |                    t          |j                   nd }d	t          ||          iS )
N  errorchild_not_foundzKind nicht gefundencodemessager]   detailT)dayrK   rO   r)   rQ   rS   rV   calendar_event)r)   getr   r   r   r   rK   rO   rQ   rS   addcommitrefreshr   )r^   r_   r   eventchilds        r#   create_calendar_eventrq   F   s    #E7;K(L(L(TWGXez>{>{4|}}}}gl'-WM`krk{  CJ  CO  W^  Wd  mq  r  r  rEKKNNOOE27.JGKKu~...dE6ueDDEEr%   z!/admin/calendar-events/{event_id}event_idc                   |                     t          |           }|t          dddddi          |                    d          }d	|v r|                    d	          |_        |                                D ]\  }}t          |||           |                    |           |	                                 |
                    |           |j        r |                     t          |j                  nd }d
t          ||          iS )Nra   rb   	not_foundTermin nicht gefundenrd   rg   Texclude_unsetr   rj   )rk   r   r   
model_dumppopri   itemssetattrrl   rm   rn   r)   r   r   )	rr   r^   r_   r   ro   datakeyvaluerp   s	            r#   update_calendar_eventr   R   s   KKx00E}W{_v>w>w4xyyyyD11D~~HHV$$	jjll # #
UsE""""KKNNOOE27.JGKKu~...dE6ueDDEEr%   c                j   |                     t          |           }|t          dddddi          d|_        |                    |           |                                 |                    |           |j        r |                     t          |j                  nd }dt          ||          d	S )
Nra   rb   rt   ru   rd   rg   FT)okrj   )
rk   r   r   rV   rl   rm   rn   r)   r   r   )rr   r_   r   ro   rp   s        r#   delete_calendar_eventr   c   s    KKx00E}W{_v>w>w4xyyyyELKKNNOOE27.JGKKu~...dE*B5%*P*PQQQr%   z/admin/examsc                   |                     t          t                                                              }d |D             |                     t          t                                        t          j        t          j        k              	                    t          j
                                                            }dfd|D             iS )Nc                    i | ]
}|j         |S rA   )id).0rp   s     r#   
<dictcomp>zlist_exams.<locals>.<dictcomp>s   s    :::EHe:::r%   examsc                `    g | ]*}t          |                    |j                            +S rA   )r   rk   r)   )r   examchild_lookups     r#   
<listcomp>zlist_exams.<locals>.<listcomp>u   s4    ^^^PTnT<+;+;DM+J+JKK^^^r%   )execr   r   allr   whererH   r   	cancelledorder_byr4   )r_   r   childrenr   r   s       @r#   
list_examsr   p   s    ||F5MM**..00H:::::LLL++DK:;O,OPPYYZ^ZhiijjnnppE^^^^X]^^^__r%   c                &   t          di |                                 }|                    |           |                                 t	          ||           |                                 |                    |           dt          |d           iS )Nr   rA   )r   rx   rl   flushr   rm   rn   r   )r^   r_   r   r   s       r#   create_examr   x   s    '''$$&&''DKKMMOOO&&&NNOODN4..//r%   z/admin/exams/{exam_id}exam_idc                2   |                     t          |           }|t          dddddi          |j        }|                    d                                          D ]\  }}t          |||           |j        t          j        k    rt          ||           n;|t          j        k    st          fd	d
D                       rt          ||           |                                 |                    |           dt          |d           iS )Nra   rb   rt      Prüfung nicht gefundenrd   rg   Trv   c              3      K   | ]}|v V  	d S r"   rA   )r   r}   r|   s     r#   	<genexpr>zupdate_exam.<locals>.<genexpr>   s?        8D  8Dt  8D  8D  8D  8D  8D  8Dr%   )r4   r:   r<   r   )rk   r   r   rH   rx   rz   r{   r   r   r   anyr   rm   rn   r   )	r   r^   r_   r   r   previous_statusr}   r~   r|   s	           @r#   update_examr      sC   ;;tW%%D|W{_x>y>y4z{{{{kOD11Djjll " "
Uc5!!!!{j***w----	J0	0	0C  8D  8D  8D  8D  PC  8D  8D  8D  5D  5D	0GT***NNOODN4..//r%   z/admin/exams/{exam_id}/cancelc                    |                     t          |           }|t          dddddi          t          j        |_        t          ||           |                                 |                    |           dt          |d           iS )Nra   rb   rt   r   rd   rg   r   )
rk   r   r   r   r   rH   r   rm   rn   r   )r   r_   r   r   s       r#   cancel_examr      s    ;;tW%%D|W{_x>y>y4z{{{{&DK7D)))NNOODN4..//r%   c                $    t          | ||          S r"   )r   )r   r_   r   s      r#   delete_examr      s    w7+++r%   )r   r   r   r   r   r    )rX   r3   rY   r(   r   r   )r^   rJ   r_   r    r   r   )rr   r(   r^   rU   r_   r    r   r   )rr   r(   r_   r    r   r   )r_   r    r   r   )r^   r'   r_   r    r   r   )r   r(   r^   rC   r_   r    r   r   )r   r(   r_   r    r   r   )3
__future__r   datetimer   r3   fastapir   r   r   r   r	   pydanticr
   r   sqlmodelr   r   app.db.sessionr   
app.modelsr   r   r   r   app.services.admin_authr   app.services.calendarr   r   r   r   r   routerr$   r'   rC   rJ   rU   rk   r[   postrq   patchr   deleter   r   r   r   r   r   rA   r%   r#   <module>r      s&   " " " " " " $ $ $ $ $ $ D D D D D D D D D D D D D D % % % % % % % % $ $ $ $ $ $ $ $ & & & & & & = = = = = = = = = = = = 5 5 5 5 5 5 H  H  H  H  H  H  H  H  H  H  H  H  H  H	 #)&=N"O"O"Ow{++0 0 0 0 0# # # # # # # #% % % % % % % %; ; ; ; ;) ; ; ;    )    KU3ZZqQ1---w{++1 1 1 1 1 %377BI'-BXBXmtmt  vA  nB  nB F F F F 87F 122QXQXYfQgQg  }D  }D  EP  }Q  }Q F F F F 32F  2333:7=3I3I^e^efq^r^r 	R 	R 	R 	R 43	R N //GGKDXDX ` ` ` ` ` ^--/6w}/E/EZaZabmZnZn 0 0 0 0 .-0 &''=DW]=S=Shohop{h|h| 0 0 0 0 ('0( ,--(/(>(>SZSZ[fSgSg 0 0 0 0 .-0 '(((/(>(>SZSZ[fSgSg , , , , )(, , ,r%   