o
    ȟ1i
                     @   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)AcademicYearCourse)AcademicYearResponseSchemac                   @   s:   e Zd Zdd Zdd ZdefddZdd	 Zd
d ZdS )AcademicYearServicec                 C   s   t  <}| }ztdi |}|| |  || |W W  d    S  ty> } z|  td| d }~ww 1 sBw   Y  d S )Nz$Could not create new academic year:  )	r   
model_dumpr   addcommitrefresh	ExceptionZrollbackr   )selfrequestdbpayloadZnew_academic_yearer   r   /app/services/academic_year.pysave   s   

zAcademicYearService.savec                 C   sT   t  }|ttjd  }dd |D W  d    S 1 s#w   Y  d S )Nc                 S   s   g | ]	}t | qS r   )r	   model_validater   ).0recordr   r   r   
<listcomp>   s    z?AcademicYearService.fetch_all_academic_year.<locals>.<listcomp>)r   queryr   where
deleted_atis_all)r   r   recordsr   r   r   fetch_all_academic_year   s   $z+AcademicYearService.fetch_all_academic_yearacademic_year_idc                 C   sl   t  )}|ttj|ktjd  }|stdddt	
| W  d    S 1 s/w   Y  d S )N  Academic year not foundstatus_codeexc)r   r   r   r   idr   r   firstr   r	   r   r   )r   r#   r   r   r   r   r   academic_year_detail   s   

$z(AcademicYearService.academic_year_detailc                 C   s   |j dgd}t ,}|ttj|ktjd j|dd}|	  |dkr.t
dddW d    d S 1 s9w   Y  d S )	Nr)   )excludeZfetch)Zsynchronize_sessionr     zCould not update academic yearr&   )r   r   r   r   filterr)   r   r   updater   r   )r   r#   r   r   r   resultr   r   r   update_academic_year(   s   "z(AcademicYearService.update_academic_yearc                 C   s   t  F}|ttj|k dkrtddd|ttj|ktj	
d  }|s3tdddttj|_	|  ddiW  d    S 1 sLw   Y  d S )	Nr   r-   z7Academic year is associated with course. Cannot delete.r&   r$   r%   messagez"Academic year deleted successfully)r   r   r   r   r#   countr   r   r)   r   r   r*   r   nowr   utcr   )r   r#   r   academic_yearr   r   r   delete_academic_year4   s   

$z(AcademicYearService.delete_academic_yearN)	__name__
__module____qualname__r   r"   intr+   r1   r7   r   r   r   r   r
   	   s    r
   N)r   r   Zcore.configr   core.security.exceptionsr   r   modelsr   r   schema.academic_yearr	   r
   r   r   r   r   <module>   s    