
    Ci                         d dl mZ d dl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 dlmZmZmZ d dlmZ d d	lmZ d d
lmZ  G d d      Zy)    )Session)funcdistinct)Capsule)Chapter)Disease)Theme)UserCapsuleProgressUserChapterProgressUserDiseaseProgress)Quiz)QuizAttempt)QuizQuestionc                   <    e Zd ZdefdZdefdZdefdZdefdZy	)
TrainingStatsServicedbc                     || _         y )N)r   )selfr   s     K/home/www/lebenam.kofcorporation.com/app/services/training_stats_service.py__init__zTrainingStatsService.__init__   s	        
capsule_idc                    | j                   j                  t              j                  t        j                  |k(        j                         }|sy | j                   j                  t        j                  t        j                              j                  t        j                  |k(        j                         }| j                   j                  t        j                  t        j                              j                  t        j                  |k(  t        j                  dk(        j                         }| j                   j                  t        j                  t        j                              j                  t        j                  |k(        j                         }|j                  |j                  ||||dS ddS )NTr   )r   titletotal_viewstotal_completedaverage_watch_time_seconds)r   queryr   filteridfirstr   countr
   user_idr   scalaris_completedavgwatch_time_secondsr   )r   r   capsuler   r   avg_watch_times         r   get_capsule_statsz&TrainingStatsService.get_capsule_stats   sS   ''--(//

j0HIOOQggmmDJJ/B/J/J$KLSS**j8

&( 	 ''--

3F3N3N(OPWW**j8,,4
 &( 	
 txx0C0V0V'WX__**j8

&( 	
 "**]]&.<J<V.
 	

 ]^
 	
r   
chapter_idc                 f   | j                   j                  t              j                  t        j                  |k(        j                         }|sy | j                   j                  t        j                  t        j                              j                  t        j                  |k(        j                         }| j                   j                  t        j                  t        j                              j                  t        j                  |k(  t        j                  dk(        j                         }| j                   j                  t              j                  t        j                  |k(        j                         }d }|r| j                   j                  t        j                  t        j                              j                  t        j                  |j                  k(        j                         }| j                   j                  t        j                  t        j                              j                  t        j                  |j                  k(  t        j                   dk(        j                         }| j                   j                  t        j"                  t        j$                              j                  t        j                  |j                  k(        j                         }	|j                  |j&                  |||	|	ndd}|j                  |j&                  |||dS )NTr   )quiz_id
quiz_titletotal_attemptstotal_passedaverage_score)r+   r   total_readsr   
quiz_stats)r   r   r   r   r    r!   r   r"   r   r#   r+   r$   r%   r   r   r-   passedr&   scorer   )
r   r+   chapterr2   r   quizr3   r/   r0   	avg_scores
             r   get_chapter_statsz&TrainingStatsService.get_chapter_stats,   s>   ''--(//

j0HIOOQggmmDJJ/B/J/J$KLSS**j8

&( 	 ''--

3F3N3N(OPWW**j8,,4
 &( 	
 ww}}T"))$//Z*GHNNP
!WW]]4::knn+EFMM##tww.fh   77==KNN)CDKK##tww.""d* fh 
 dhh{/@/@&ABII##tww.fh 
  77"jj"0 ,.7.CJ "**]]&.$
 	
r   theme_idc           	      ~   | j                   j                  t              j                  t        j                  |k(        j                         }|sy | j                   j                  t              j                  t        j                  |k(        j                         }|D cg c]  }|j                   }}|s|j                  |j                  ddg dS | j                   j                  t        t        j                              j                  t        j                  j                  |            j                         }t        |      }g }|D ]  \  }	| j                   j                  t              j                  t        j                  |	k(  t        j                  j                  |            j                         }
t!        |
D cg c]  }|j"                   c}      }|r|t        |      z  nd}|j%                  |	|t!        d |
D              d        | j                   j                  t'        j(                  t        j"                              j                  t        j                  j                  |            j+                         }|j                  |j                  ||||dS d|dS c c}w c c}w )Nr   )r:   
theme_nametotal_users_startedaverage_progress_percentageuser_progress_detailsc              3   :   K   | ]  }|j                   sd   yw)   N)r%   ).0ps     r   	<genexpr>z@TrainingStatsService.get_theme_progress_stats.<locals>.<genexpr>~   s     2gXYXfXf12gs   )r#   average_progress_in_themecompleted_diseases_in_theme)r:   r<   r=   #overall_average_progress_percentager?   )r   r   r	   r   r    r!   r   r:   allnamer   r   r#   
disease_idin_lensumprogress_percentageappendr   r&   r$   )r   r:   themediseases_in_themeddisease_idsusers_started_themer=   r?   r#   user_diseases_progressrC   total_progress_sumavg_user_progressoverall_avg_progresss                  r   get_theme_progress_statsz-TrainingStatsService.get_theme_progress_statsZ   sR   e$++EHH,@AGGI GGMM'299':J:Jh:VW[[]%67qtt77!HH#jj'(/0)+  #ggmmH5H5P5P,QRYY**..{;

#% 	 ""56 "+ 	HG%)WW]]3F%G%N%N#++w6#..22;?& ce #
 "%E[%\a&;&;%\!]O` 2S9J5K Kfg!(("->/22g>T2g/g* 	  $ww}}TXX6I6]6]-^_ff**..{; 

&( 	
 **#6K_Kk3G%:
 	
 rs%:
 	
K 80 &]s   "J5	J:
N)	__name__
__module____qualname__r   r   intr*   r9   rY    r   r   r   r      s3    7 
C 
4,
C ,
\1
 1
r   r   N)sqlalchemy.ormr   
sqlalchemyr   r   app.models.capsuler   app.models.chapterr   app.models.diseaser   app.models.themer	   app.models.user_progressr
   r   r   app.models.quizr   app.models.quiz_attemptr   app.models.quiz_questionr   r   r^   r   r   <module>ri      s4    # % & & & " b b   / 1}
 }
r   