
    i                     f   d dl m Z  d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 d dl	mZ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 d dlmZ d dlmZ dededefdZdedefdZdefdZddddd ee          fdededee         dededefdZdedefd Z deded!efd"Z!dedefd#Z"dS )$    )datetime)Session)
University)UniversityBase)IntegrityError)HTTPException)Dependsr   status)funcascdescor_)JSONResponse)jsonable_encoder)Optional)get_dbnameidreturnc                     d}d                     t          t          j        |                                                     dd         }t          j                                        d          }| d| d| d|dS )zn
    Generate a unique university code based on university name and ID.
    Example: UNI-DEL-20251028-001
    UNI N   z%Y%m%d-03d)joinfilterstrisalnumupperr   nowstrftime)r   r   prefix	name_part	date_parts        :/var/www/html/syllabuild_adminapi/controller/university.pyget_university_coder'      sw    
 Fs{DJJLL99::2A2>I''11I77y77977r7777    dbunic                    t          di |                                }|                     |           	 |                                  |                     |           t          |j        |j                  |_        |                                  |                     |           d|j        iS # t          $ r& | 
                                 t          dd          w xY w)Ninstitution_codei  zEmail already existsstatus_codedetail )r   dictaddcommitrefreshr'   r   r   r,   r   rollbackr   )r)   r*   db_unis      r&   create_universityr7      s    %%#((**%%FFF6NNNL
		


6 #6fk69"M"M
		


6"F$;<< L L L
4JKKKKLs   A9B/ /0Cc                 Z    |                      t                                                    S N)queryr   all)r)   s    r&   get_universities_dropdownr<   ,   s     88J##%%%r(      
   Nr   pageNorecordsPerPagesearchsort_by
sort_orderc           
      
  K   |                     t                    }|re|                    t          t          j                            d| d          t          j                            d| d                              }t          t          |          rMt          t          |          }|	                    |dk    rt          |          nt          |                    }n,|	                    t          t          j                            }| dz
  |z  }|                    |                              |                                          }	|	st!          t"          j        d          |                     t'          j        t          j                                                            }
d |	D             }t-          ||
| ||
|z   dz
  |z  t"          j        dd          }t1          |t"          j        	          S )
zL
    Retrieve paginated, searchable, and sortable list of universities.
    %r   r=   zNo universities foundr-   c                 t    g | ]5}|j         |j        |j        |j        |j        |j        |j        |j        d 6S )r   r   r,   emailphoneaddress
created_at
updated_atrG   ).0r*   s     r&   
<listcomp>z$get_universities.<locals>.<listcomp>[   sZ         &H # 4YY{..		
 		
  r(   z#Universities retrieved successfully)universitiestotal_countpage_norecords_per_pagetotal_pagesr.   message)contentr.   )r:   r   r   r   r   iliker,   hasattrgetattrorder_byr   r   r   offsetlimitr;   r   r
   HTTP_404_NOT_FOUNDr   countscalarr   HTTP_200_OKr   )r?   r@   rA   rB   rC   r)   db_querysort_columnrZ   rO   total_universitiesuniversities_listresponse_datas                r&   get_universitiesre   1   s      xx
##H  
??%%m&mmm44+11-f---@@ 
 
 z7## 9j'22$$u9L9LS%5%5%5RVWbRcRcdd$$S%7%788 qjN*F??6**00@@DDFFL c(AJabbbb $*Z]";";<<CCEE      %))**^;a?NR)8& &  M 6;MNNNNr(   university_idc                     |                      t                                        t          j        |k                                              S r9   )r:   r   r   r   first)r)   rf   s     r&   get_universityri   v   s5    88J&&z}'EFFLLNNNr(   
uni_updatec                 t   |                      t                                        t          j        |k                                              }|rh|                    d                                          D ]\  }}t          |||           |                                  | 	                    |           |S )NT)exclude_unset)
r:   r   r   r   rh   r1   itemssetattrr3   r4   )r)   rf   rj   r6   keyvalues         r&   update_universityrq   y   s    XXj!!((-)GHHNNPPF $///==CCEE 	( 	(JCFC''''
		


6Mr(   c                     |                      t                                        t          j        |k                                              }|r)|                     |           |                                  |S r9   )r:   r   r   r   rh   deleter3   )r)   rf   r6   s      r&   delete_universityrt      s`    XXj!!((-)GHHNNPPF 
		&
		Mr(   )#r   sqlalchemy.ormr   db.models.universityr   db.schemas.universityr   sqlalchemy.excr   fastapir   r	   r
   
sqlalchemyr   r   r   r   fastapi.responsesr   fastapi.encodersr   typingr   
db.sessionr   r   intr'   r7   r<   re   ri   rq   rt   r0   r(   r&   <module>r      s~         " " " " " " + + + + + + 0 0 0 0 0 0 ) ) ) ) ) ) ! ! ! ! ! ! 2 2 2 2 2 2 2 2 2 2 " " " " " " + + + + + + + + + + + + * * * * * * - - - - - -            	8c 	8s 	8s 	8 	8 	8 	8L' L L L L L&&' & & & &  '&//CO COCOCO SMCO 	CO
 CO 	CO CO CO COJOw Os O O O O' # >    ' #      r(   