
    կ)i9                         d dl mZ d dlmZ d dlmZ d dlmc mc m	Z	 d dl
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 d d
lmZ d dlmZ  G d d      Zy)    )List)HTTPException)SessionN)StudentService)Messages)CategoryCreateTblCategory)	GroupBaseTblGroup)TblMainData)
TblStudent)CustomResponsec                       e Zd ZdefdZdej                  fdZdefdZ	defdZ
defd	Zdeej                     fd
ZdefdZdefdZdefdZdedej(                  fdZy)GroupServicedbc                      || _         || _        y N)r   token)selfr   r   s      </var/www/html/retail-simulation-api/app/api/group/service.py__init__zGroupService.__init__   s    
    requestc                    K   t        j                  |j                               }t        j                  || j
                         | j
                  j                          t        dt        j                        S w)N1statusmessage)
r
   model_validate
model_dumpr   creater   commitr   r   GROUP_CREAT)r   r   created_users      r   create_groupzGroupService.create_group   sR      //0B0B0DEdgg.S83G3GHHs   A9A;group_idc                    K   t        j                  || j                        }|st        dt        j
                        t        j                  j                  |      S w)N  status_codedetail)	r   	get_groupr   r   r   GROUP_NOT_FOUNDschemasGroupResposer   r   r&   groups      r   r,   zGroupService.get_group   sI     ""8TWW5Cx7O7OPP##22599s   AAc                    K   t        j                  || j                        }|st        dt        j
                        t        j                  |d   |d         S w)Nr(   r)   r      category_assignedcategory)r   get_group_categoryr   r   r   r-   r.   GroupCategoryResponse)r   r&   results      r   r7   zGroupService.get_group_category   sP     ,,Xtww?C8P8PQQ,,vaySYZ[S\]]s   AA
group_codec                   K   | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      t        | j                   | j                        }g }|j                  |j                         d {   }|j                  |j                  |j                  |j                  |j                  |j                  |j                   |j                  |d       d|iS 7 hw)Nr(   zSimulation Code Not Foundr)   )r&   
group_namer5   r6   number_of_memberssimulation_coder:   studentr1   )r   queryr   filterr:   firstr   r   r   get_simulation_group_studentappendr&   r<   r5   r6   r=   r>   )r   r:   get_datastudent_servicer9   r?   s         r   get_simulation_groupz!GroupService.get_simulation_group$   s     77==*11(2E2E2STZZ\C7RSS($**='DDXEXEXYY ))"--!)!;!; ))!)!;!;'77"--

 
	    Zs   BD
D A)D
c                   K   |D ]  }t        j                  |j                               }|j                  t	        dt
        j                        t        j                  |j                  || j                        }|r{t	        dt
        j                         | j                  j                          t        dt
        j                        S w)Nr(   r)   r   r   )r
   r   r    r&   r   r   r-   r   updater   r"   r   GROUP_UPDATE)r   r   reqr1   updated_groups        r   update_groupzGroupService.update_group=   s     C,,S^^-=>E~~%#H<T<TUU$OOENNE477KM #8;S;STT  	S(2G2GHHs   A=C ACc                   K   | j                   j                  t              j                  t        j                  |k(        j                         }|D cg c]!  }t        j                  j                  |      # c}S c c}w wr   )	r   r@   r   rA   r:   allr.   StudentInfor   )r   r:   studentsr?   s       r   get_group_studentszGroupService.get_group_studentsH   s`     77==,33J4I4IZ4WX\\^KST8##227;8TTTs   AB&A=:Bc                 
   t        j                  |j                  | j                        }|st	        dt
        j                        |j                  rt        dd      S |j                  }| j                  j                  t               j                  t         j                  |k(  t         j                  |j                  k(        j                         }|rt        dd      S |j                  rt        dd      S t        j                  t!        j"                  |j%                               | j                         |j                  |_        | j                  j'                          t        dt
        j(                        S )Nr(   r)   r   z#Category already assigned by admin.r   zJThis category is already assigned to another group in the same simulation.z(Category already assigned to this group.)r   r,   r&   r   r   r   r-   r5   r   r>   r@   rA   choose_categoryrB   r	   r!   r   r   r    r"   GROUP_CATEGORY)r   r   r1   r>   existing_categorys        r   create_categoryzGroupService.create_categoryi   s.   ""7#3#3TWW=C8P8PQQ""!6[\\// GGMM(3::$$7&&'*A*AA
 %' 	 !  7C  D  D""!6`aa>889K9K9MNPTPWPWX")"9"9S(2I2IJJr   c                    | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      |j                  xs |j                  }|st        dd      | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      |S )Nr(   Group not foundr)   i  zGroup has no category assignedz%Main data not found for this category)r   r@   r   rA   r&   rB   r   r5   r6   r   format_type)r   r&   r1   r6   	main_datas        r   get_main_data_by_group_servicez+GroupService.get_main_data_by_group_service}   s    h'..x/@/@H/LMSSUC8IJJ**<ennC8XYYGGMM+.55k6M6MQY6YZ``b	C8_``r   returnc                    | j                   j                  t              j                  t        j                  |k(        j                         }|st        dd      t        j                  |j                  |j                        S )Nr(   rY   r)   r4   )r   r@   r   rA   r&   rB   r   r.   r8   r5   r6   r0   s      r   get_group_category_servicez'GroupService.get_group_category_service   sg    h'..x/@/@H/LMSSUC8IJJ,,#55^^
 	
r   N)__name__
__module____qualname__r   r   r.   GroupCreater%   intr,   r7   strrG   r   GroupUpdaterM   rR   r   rW   r\   r8   r_    r   r   r   r      s    7 I'*=*= I: :^ ^!C !2	I$w/B/B*C 	IU3 UBK~ K(
c 

3 
7;X;X 
r   r   )typingr   fastapir   sqlalchemy.ormr   app.api.group.schemasapir1   r.   app.api.student.servicer   app.locale.messagesr   app.models.main.categoryr   r	   app.models.main.groupr
   r   app.models.main.main_datar   app.models.main.studentr   app.utils.schemas_utilsr   r   rg   r   r   <module>rt      s5     ! " ' ' 2 ( @ 4 1 . 2C
 C
r   