o
    ȟ1ig&                  
   @   s  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 d dlmZ d dlmZmZmZmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ eddZ	 	 	 	 ejdededededeeeefde de!de!de!fddZ"ejdedeeeefde fddZ#ej$dedeeeefdefddZ%ejdedeeeefde de fd d!Z&ej$d"edeeeefdefd#d$Z'G d%d& d&e	Z(e$d'eeeefde(fd(d)Z)G d*d+ d+e	Z*e$d,eeeefde*fd-d.Z+G d/d0 d0e	Z,e$d1eeeefde,fd2d3Z-G d4d5 d5e	Z.e$d6eeeefde.fd7d8Z/dS )9    )date)Optional)Depends	APIRouterQuery)	BaseModel)get_db)get_user)
AttendanceCourseAllocationPaymentCourseParticipantPaymentDetails)GenericResponse)AttendanceCreateSchemaAttendanceFilterSchema)AttendanceService)ReportServicez/attendance)prefixz/allocated_course/{staff_id})response_modelNstaff_idacademic_year_idterm_idcourse_namec           
         s   t  j}|tttjtjktj| k}|r"|tj	|k}|r,|tj
|k}|r7|tj|}g }| D ])}	||	j|	jj|	jjj|	jjj|	jj|	jj|	jj|	jj|	j|	jj|	jjd q=W d    n1 sqw   Y  d|dS )N)	course_idr   agetermZcourse_start_dateZcourse_end_dateZcourse_start_timeZcourse_end_timerole_idrolehas_attendance_managementzcourse populated successfully.messagedata)r   queryr   joinr   idr   filterr   r   r   name	icontainsallappendcourse	age_grouplabelr   
start_dateend_date
start_timeend_timer   r   r    )
r   r   r   r   userservicedbr$   r#   row r7   /app/api/attendance.py"get_allocated_course_list_by_staffC   s:   

r9   z/list_participant/{course_id}r   c              	      s   t  4}|ttjtj| ktjdk	 }g }|D ]}|
|j|jj|jj|jd qW d    n1 s;w   Y  d|dS )NT)participant_idZparticipant_first_nameZparticipant_last_namer   z#participant populated successfully.r!   )r   r$   r   r%   paymentr'   r   r   is_payment_completedr*   r+   purchased_for_idpurchased_participant
first_name	last_name)r   r3   r4   r5   r$   r#   r6   r7   r7   r8   list_participant_under_courseg   s*   


rA   z/markingrequestc                    s   | |  ddiS )Nr"    Attendance updated successfully.)save)rB   r3   r4   r7   r7   r8   create_attendance   s   
rE   z/marking/{staff_id}/{course_id}c                    s   t  G}|ttj| ktj|k }g }|D ])}||j|j|j|j	|j
|jt|jj|jjdt|jj|jj|jjdd qW d    n1 sNw   Y  d|dS N)r(   r&   )r?   r&   r@   )r   r   r:   attendance_statusattendance_dateremarksr,   participant"Attendance populated successfully.r!   )r   r$   r
   r'   r   r   r*   r+   r:   rG   rH   rI   dictr,   r(   r&   rJ   r?   r@   )r   r   r3   r4   r5   r$   r#   r6   r7   r7   r8   list_attendance_by_staff_id   s(   "

rM   z/filterc                    s   t  e}|ttj| jk}| jr|tj| jk}| jr2|ttjtj	ktj
| j}g }| D ])}||j|j|j|j|j|jt|jj|jj	dt|jj
|jj	|jjdd q8W d    n1 slw   Y  d|dS rF   )r   r$   r
   r'   r:   r   Zparticipant_namer%   r   r&   r?   r)   Zparticippant_namer*   r+   r   rG   rH   rI   rL   r,   r(   rJ   r@   )rB   r3   r4   r5   r$   r#   r6   r7   r7   r8   attendance_filter   s4   

rN   c                   @   s6   e Zd ZU dZeed< dZeed< dZee	 ed< dS )AttendanceViewByStaffNr   r   rH   )
__name__
__module____qualname__r   int__annotations__r   rH   r   r   r7   r7   r7   r8   rO      s   
 rO   z/staffc                       | | |}d|dS NrK   r!   )Zview_attendance_from_staffrB   r3   r4   r#   r7   r7   r8   staff_attendance_view      
rX   c                   @   sV   e Zd ZU eed< dZee ed< dZee ed< dZee ed< dZ	ee
 ed< dS )AttendanceViewByParentr:   Nr   r   r   rH   )rP   rQ   rR   rS   rT   r   r   r   r   rH   r   r7   r7   r7   r8   rZ      s   
 rZ   z/parentc                    rU   rV   )Zview_attendance_from_parentrW   r7   r7   r8   parent_attendance_view   rY   r[   c                   @   sF   e Zd ZU eed< eed< eed< dZee ed< dZee ed< dS )AttendanceViewByAdminr   r   rH   Ncourse_category_idr   )	rP   rQ   rR   rS   rT   r   r]   r   r   r7   r7   r7   r8   r\      s   
 r\   z/adminc                    rU   rV   )Zview_attendance_from_adminrW   r7   r7   r8   admin_attendance_view   rY   r^   c                   @   sN   e Zd ZU eed< eed< eed< eed< dZee ed< eed< eed< dS )	AttendanceUpdateByAdminr:   r   r   rG   NrI   rH   Zattendance_id)	rP   rQ   rR   rS   rT   strrI   r   r   r7   r7   r7   r8   r_      s   
 r_   z/admin/updatec                    rU   )NrC   r!   )Zupdate_attendance_from_adminrW   r7   r7   r8   admin_attendance_update   rY   ra   )0datetimer   typingr   fastapir   r   r   pydanticr   core.configr   core.security.authenticationr	   modelsr
   r   r   r   r   r   schemar   Zschema.attendancer   r   Zservices.attendancer   Zservices.reportr   attendance_routergetrS   r`   r9   rA   postrE   rM   rN   rO   rX   rZ   r[   r\   r^   r_   ra   r7   r7   r7   r8   <module>   sr     
#"
