U
    ld                    @   s	  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 d dlmZ 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mZmZm Z  d dl!m"Z" d dl#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z, d dl-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR d dlSmTZT d dlUmVZV d dlWmXZXmYZYmZZZ d dl[m\Z\ ddl]m^Z^ ddl_m`Z` ddlambZbmcZcmdZd ddlemfZfmgZgmhZhmiZi eeZjee\ZkeeZleebZmeedZneecZoeejdddddeeke2ddeelejpgeddddG d d! d!eZqeejdd"d"d#ddeeke1ddeelejpge$d$dddG d%d& d&eZreejdd"d"d#ddeekeBddeelejpge$d$d'ddG d(d) d)eZseejdd"d"d#ddeekeHddeelejtge$d$d'ddG d*d+ d+eZueejdd"d"d#ddeekeQddeelejtge%d$d,ddG d-d. d.eZveejdd"d"d#ddeekeOddG d/d0 d0eZweejdd"d"d#ddeekePddG d1d2 d2eZxeejdd3ddeeke/ddeelejyejzej{geddddG d4d5 d5eZ|eejdd3ddeeke0ddeelejyge$d$d'ddG d6d7 d7eZ}d8d9 Z~d:d; Zeejdd3ddeekeNddeelejpge$d$d'ddG d<d= d=eZeejdd3ddeeke.ddeelejyge$d$d'ddG d>d? d?eZeejdddddeekeGddeelejpgeddddG d@dA dAeZeejdd"d"d#ddeekeJddeelejge(d$dddG dBdC dCeZeejdd3ddeeke;ddeelejyejzej{ge$dd'ddG dDdE dEeZeejdd3ddeeke<ddeelejyge(d$dFddG dGdH dHeZeejdd3ddeekeKddeelejge(d$dFddG dIdJ dJeZeejdddddeeke>ddG dKdL dLeZeeke4ddeem ddG dMdN dNeZeekeMddeem ddG dOdP dPeZeeke5ddeem ddeeod"ddQddeen ddG dRdS dSeZeeke8ddeem ddeeoddTddG dUdV dVeZdWdX Zeeke9ddeem ddeeoddTddG dYdZ dZeZeeke:ddeejdd3ddeem ddG d[d\ d\eZeejdd]ddeeke7ddG d^d_ d_eZeejdd]ddeekeRddG d`da daeZeejdd]ddeeke@ddG dbdc dceZeejdddddeekeAddeelejpge%ddd,ddG dedf dfeZdgS )h    )Q)timezone)#decorator_from_middleware_with_argsmethod_decorator)statusserializers)APIView)AuthorizatorMiddleware)defined_roles)CollaborationAccessMiddleware)Exam)	InstituteInstituteStudent)5InstituteSerializerForExamAndInstituteAndQuestionBank)UserBalanceHistory)QUESTION_TYPE_MULTIPLE_CHOICEQUESTION_TYPE_DESCRIPTIVEQuestion"QUESTION_FORMAT_SERIALIZER_CHOICES)conf)	Quiz	QuizSheetQUIZ_SHEET_STATE_FINISHED!QUIZ_SHEET_STATE_SCORES_PUBLISHEDQuizTemplateQuestionScoreQUIZ_SHEET_STATE_IN_PROGRESSQUIZ_SHEET_STATE_NOT_ATTENDEDQUIZ_TYPE_SURVEY)%ArchiveQuizInputSerializerCreateQuizInputSerializerEditQuizInputSerializerGetQuizInputSerializerQuizListInputSerializerQuizModelSerializerQuizGateWayInputSerializerQuizEnterInputSerializer QuizSheetModelForEnterSerializerGenerateQuizSheetInputValidatorSetAnswerInputSerializerFinishQuizSheetInputSerializerInvoiceInputSerializer!CreateQuizTemplateInputSerializerEditQuizTemplateInputSerializerQuizTemplateModelSerializer!QuizTemplateMarketInputSerializer"GetQuizSheetForInstituteSerializerVerifyQuizSheetInputValidator$QuizSheetCorrectionAddInputValidatorGetQuizStatInputSerializerQuizSheetModelForStatSerializer$QuizSheetForInstituteModelSerializerQuizGetModelSerializer"QuizSheetModelSerializerForHistoryQuizTemplateListInputSerializerGetQuizSheetListInputSerializerGetQuizSheetForListSerializerGetQuizTemplateInputSerializer"ArchiveQuizTemplateInputSerializer%QuizSheetModelForReportCardSerializerQuizSheetReportInputSerializer!QuizReportCardTestInputSerializer'GetQuizSheetAttendedListInputSerializer#QuizSheetAttendedGetInputSerializerQuizSheetGetInputSerializer!GetQuizIdFromExamIdInputValidator)create_quiz_sheet_helper)
MyResponse)compress_imagesort_by_translator
logs_adder)SerializerValidationMiddleware   )	Blueprint)Rule)EntranceValidatorMiddleware#QuizSheetStatusValidationMiddlewareQuizPurchaseHandlerMiddleware)generate_report_card_helperauto_correct_helperprice_calculator_helperquiz_purchase_handlerT)accept_user_tokenaccept_server_api_keypostnameidcontext_institute_idc                   @   s   e Zd Zdd ZdS )QuizListc                 C   s6  |j d}|j d}|j d}|j d}t|j d}|j d}|j d}|j d}	|j d	}
|j d
}|j d}tjj|jd}|r|j|d}n6|r|j|d}|dkr|tt	 dtddB }n|dkr|jt	 d}|dkr|jdd}n|dkr*|jdd}|	dkrB|jdd}n|	dkrX|jdd}|
dkrp|jdd}n|
dkr|jdd}|dkr|jdd}n|dkr|jdd}|dkr|jdd}n|dkr|jdd}|
 }|||||  }t|ddj}t|ddtt	 ||ddtjd S )!Nqqidskiptakesort_byexpired_filterreanswerable_filtershuffle_questions_filtershuffle_choices_filter single_question_at_a_time_filterarchived_filter	instituterY   name__icontainsexclude)Zend__gtT)Zend__isnullonly)Zend__lteFreanswerableshuffle_questionsshuffle_choicessingle_question_at_a_timearchivedmanyok
Successful)current_date_timetotal_countquizzesr   messagedatar   )middleware_serializer_datagetrG   r   objectsfiltermiddleware_instituter   r   nowcountorder_byr$   r   rE   strr   HTTP_200_OK)selfrequestr\   r]   r^   r_   r`   ra   rb   rc   rd   re   rf   quiz_querysetr}   	quiz_data r   &/var/www/wikiazma_server/quiz/views.pyrV   7   sd     









zQuizList.postN__name__
__module____qualname__rV   r   r   r   r   r[   3   s   r[   F)rT   accept_server_tokenrU   pkc                   @   s   e Zd Zdd ZdS )QuizGetc                 C   s:   |j }t|ddidj}t|dd|t ddtjdS )	Nwith_blueprintTcontextrz   r{   )quizr|   r   r   )middleware_model_recordr6   r   rE   r   r   r   r   r   r   r   r   r   r   r   rV      s    zQuizGet.postNr   r   r   r   r   r   ~   s   r   quiz_idc                   @   s   e Zd Zdd ZdS )QuizStatc              	   C   s  |j }|jd}|jd}|jd}t|jd}tjj|d}|rz|t|dt|dB t|dB t|d	B }| }|	||||  }	|D ]4}
|

 \}}|d k	r|
jtkr|
jtkrt|
 qt|d
didj}t|	ddj}t|dd|||t ddtjdS Nr^   r_   name_filterr`   )r   Zuser__first_name__containsZuser__last_name__containsZ'institute_student__first_name__containsZ&institute_student__last_name__containsr   Tr   rx   rz   r{   )r   quiz_sheetsr}   r|   r   r   )r   r   r   rG   r   r   r   r   r   r   can_be_continued_statestater   r   quiz_sheet_finish_helperr$   r   r4   rE   r   r   r   r   r   r   r   r^   r_   r   r`   sheetsr}   sheets_queryset
quiz_sheeterror_statusr   r   sheets_datar   r   r   rV      s@    
zQuizStat.postNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )QuizSheetListc              	   C   s  |j }|jd}|jd}|jd}t|jd}tjj|d}|rz|t|dt|dB t|dB t|d	B }| }|	||||  }	|D ]4}
|

 \}}|d k	r|
jtkr|
jtkrt|
 qt|d
didj}t|	ddj}t|dd|||t ddtjdS r   )r   r   r   rG   r   r   r   r   r   r   r   r   r   r   r   r$   r   r:   rE   r   r   r   r   r   r   r   r   rV      s@    
zQuizSheetList.postNr   r   r   r   r   r      s   r   quiz_sheet_idc                   @   s   e Zd Zdd ZdS )QuizSheetGetc                 C   s0   |j }t|j}d|i}t|dd|dtjdS )Nr   rz   r{   r   r   )r   r=   r   rE   r   r   )r   r   r   quiz_sheet_datar   r   r   r   rV      s    
zQuizSheetGet.postNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )QuizSheetAttendedListc                 C   s  |j }|jd}|jd}|jd}t|jd}tjj|d}|rz|t|dt|dB t|dB t|d	B }| }|	||||  }	|D ]4}
|

 \}}|d k	r|
jtkr|
jtkrt|
 qt|	d
dj}t|dd||t ddtjdS )Nr^   r_   r   r`   userr   r   r   r   Trx   rz   r{   )r   r}   r|   r   r   )middleware_userr   r   rG   r   r   r   r   r   r   r   r   r   r   r   r:   r   rE   r   r   r   r   )r   r   r   r^   r_   r   r`   r   r}   r   r   r   r   r   r   r   r   rV      s:    
zQuizSheetAttendedList.postNr   r   r   r   r   r      s   r   c                   @   s   e Zd Zdd ZdS )QuizSheetAttendedGetc                 C   st   |j }|jd}ztjj||d}W n"   t|dddtjd Y S X t|j	}d|i}t|dd	|d
tj
dS )Nr   )r   r   errorQuiz Sheet not foundr   r   r   r   rz   r{   r   )r   r   r   r   r   rE   r   HTTP_404_NOT_FOUNDr'   r   r   )r   r   r   r   r   r   r   r   r   r   rV     s    
zQuizSheetAttendedGet.postNr   r   r   r   r   r     s   r   )rT   c                   @   s   e Zd Zdd ZdS )
CreateQuizc                 C   s  |j }|jd}|jd}|jd}|jd}|jd}|jd}|jd}	|jd}
|jd	}|jd
}|jd}|jd}|jd}|jd}|jd}|jd}|jd}t|}|j|d tj|d}tj	j
|||sdn||||	|
|||||| || ||||j|rHt|tjdnd |r^t|tjdnd d}t|ddidj}t|ddd|idtjdS )NrX   ruleru   publicro   	quiz_typerq   rs   apply_negative_scoresposterstartenddurationdescriptionthemepricefinish_messageZcontext_instituer   Tmax_side_size)rh   rX   ru   ro   r   rq   rs   r   r   r   r   r   questions_countr   
_blueprintr   r   r   creatorr   poster_thumbnailr   r   rz   r{   r   r   r   )r   r   r   rL   	from_dictpermission_checkerrK   	from_ruler   r   creater   to_dictr   rF   r   quiz_poster_compress_side_size$quiz_poster_thumb_compress_side_sizer$   r   rE   r   r   )r   r   context_instituterX   	rule_dictru   r   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   	blueprintr   r   r   r   r   rV   1  sl    

           zCreateQuiz.postNr   r   r   r   r   r   +  s   r   c                   @   s   e Zd Zdd ZdS )EditQuizc                 C   s  |j }|j}|jd}|jd}|jd}|jd}|jd}|jd}	|jd}
|jd}|jd	}|jd
}|jd}|jd}|jd}|jd}|jd}|jd}|jd}|jd}|r t|}|j|d tj|d}|	 |_
| |_||_|s0dn||_||_||_|	|_|
|_||_||_||_||_||_||_|j|_||_||_||_|r|jrd |_d |_n&|rt|t j!d|_t|t j"d|_|#  t$|ddidj%}t&|ddd|idt'j(dS )NrX   r   ru   r   ro   r   rq   rs   r   r   remove_posterr   r   r   r   r   r   r   r   r   Tr   r   r   rz   r{   r   r   r   ))r   r   r   r   rL   r   r   rK   r   r   r   r   rX   ru   r   ro   r   rq   rs   r   r   r   r   r   r   last_editorr   r   r   r   r   rF   r   r   r   saver$   r   rE   r   r   )r   r   r   r   rX   r   ru   r   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   f  sj    


zEditQuiz.postNr   r   r   r   r   r   a  s   r   c                 C   s&   | d D ]}|d |kr|  S qd S )NgroupsrX   r   )report_card	book_namebookr   r   r   get_report_card_group  s    r   c                 C   s   t | |}|d krdS |d S )Nr   t)r   )r   r   
found_bookr   r   r   get_report_card_group_t_helper  s    
r   c                   @   s   e Zd Zdd ZdS )QuizReportCardTestc                    s|  |j }|j}ttjj|td}t|j	}t
|dkrPt|ddi dtjdS dd |jD }tt
|D ]
}||  g }|D ](}	t|	j }
|
d krq||
d	  qt
|dkr|  |d
8 } qzt|t
| tfdd|D t
| }|d }|D ]l}	t|	j }
|
d kr(q
|
d< ||
d< |dkrX|
d	  | |
d< nd|
d< d|
d  d |
d< q
qlt
|dkrt|ddi dtjdS |D ]J}	d}d}|	jd D ] | d d
 7 }|d
7 }q|| |	jd d< q|D ]Ɖ |jd fddd dddd}|D ]f}	t|	j }
|
d kr<q|d  d
7  < |
d |d krv|d |d< |
d |d< |d |
d< q|D ],}	t|	j }
|
d krq|d |
d< qq|jdd d d dddd}|D ]^}	|d  d
7  < |	jd d |d kr(|d |d< |	jd d |d< |d |	jd d< q|D ] }	|d |	jd d< |	  qBt|dd!i dtjdS )"N)r   r   r   rz   zNo Quiz Sheet foundr   r   c                 S   s   g | ]
}|j qS r   rW   ).0Zblueprint_groupr   r   r   
<listcomp>  s     z+QuizReportCardTest.post.<locals>.<listcomp>Zpercent_with_negativesrJ   c                    s   g | ]}|  d  qS )   r   )r   x)meanr   r   r     s     g      ?r   Zstandard_deviationzi  i  r   zNo Book Foundr   overallTc                    s   t | j S )N)r   r   r   )r   r   r   <lambda>      z)QuizReportCardTest.post.<locals>.<lambda>)reversekeyi )r   r   rankr   r   Zcountry_rankZcountry_total_studentsc                 S   s   | j d d S )Nr   r   )r   r   r   r   r   r   "  r   r{   )r   r   listr   r   r   r   rK   r   r   lenrE   r   r   r   ranger   r   appendremovesumsortr   )r   r   r   r   r   r   ZbooksiZpercentagesr   r   ZvariancestddevZtotal_tZtotal_factorZcountry_reportr   )r   r   r   rV     s    




zQuizReportCardTest.postNr   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )ArchiveQuizc                 C   sB   |j }d|_|  t|ddidj}t|ddd|idtjd	S 
NTr   Fr   rz   r{   r   r   r   )r   rw   r   r$   r   rE   r   r   r   r   r   r   rV   F  s    zArchiveQuiz.postNr   r   r   r   r   r  A  s   r  c                   @   s   e Zd Zdd ZdS )QuizTemplateListc                 C   s  |j d}|j d}|j d}t|j d}|j d}|j d}|j d}|j d}	|j d	}
tjj|jd
}|r|j|d}|dkr|jdd}n|dkr|jdd}|dkr|jdd}n|dkr|jdd}|dkr|jdd}n|dkr|jdd}|	dkr(|jdd}n|	dkr>|jdd}|
dkrV|jdd}n|
dkrl|jdd}| }|||||  }t	|ddj
}t|ddt ||ddtjdS )Nr\   r^   r_   r`   rb   rc   rd   re   rf   rg   rj   rl   Frn   rm   Trp   rr   rt   rv   rx   rz   r{   r|   r}   Zquiz_templatesr   r   )r   r   rG   r   r   r   r   r   r   r.   r   rE   r   r   r   r   r   r   r\   r^   r_   r`   rb   rc   rd   re   rf   r   r}   r   r   r   r   rV   T  sT    




zQuizTemplateList.postNr   r   r   r   r   r  P  s   r  c                   @   s   e Zd Zdd ZdS )QuizTemplateGetc                 C   s:   |j }t|ddidj}t|dd|t ddtjdS )	Nr   Tr   rz   r{   )quiz_templater|   r   r   )r   r.   r   rE   r   r   r   r   r   r   r  r   r   r   r   rV     s    zQuizTemplateGet.postNr   r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )CreateQuizTemplatec                 C   s   |j }tjj|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|j|j|jd}t|ddidj}t|ddd|idtjd	S )
N)rh   rX   ru   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   r   r   Tr   rz   r{   r  r   r   )r   r   r   r   rh   rX   ru   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   r   r.   r   rE   r   r   )r   r   r   r  Zquiz_template_datar   r   r   rV     s.           zCreateQuizTemplate.postNr   r   r   r   r   r	    s   r	  Zquiz_template_idc                   @   s   e Zd Zdd ZdS )EditQuizTemplatec                 C   s  |j }|j}|jd}|jd}|jd}|jd}|jd}|jd}	|jd}
|jd}|jd	}|jd
}|jd}|jd}|jd}|jd}|jd}|jd}|rt|}|j|d tj|d}|	 |_
| |_||_|sdn||_||_||_|	|_|
|_||_||_||_||_||_||_||_|r||jr|d |_d |_n&|rt|tjd|_t|tjd|_|  t |ddidj!}t"|ddd|idt#j$dS )NrX   r   ru   r   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   Tr   r   r   rz   r{   r  r   r   )%r   r   r   r   rL   r   r   rK   r   r   r   r   rX   ru   ro   r   r   rq   rs   r   r   r   r   r   r   r   r   rF   r   r   r   r   r.   r   rE   r   r   )r   r   r   r   rX   r   ru   r   ro   r   rq   rs   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV     s`    


zEditQuizTemplate.postNr   r   r   r   r   r
    s   r
  c                   @   s   e Zd Zdd ZdS )ArchiveQuizTemplatec                 C   sB   |j }d|_|  t|ddidj}t|ddd|idtjd	S r  )r   rw   r   r.   r   rE   r   r   r  r   r   r   rV     s    zArchiveQuizTemplate.postNr   r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )QuizTemplateMarketc                 C   s  |j d}|j d}|j d}t|j d}|j d}|j d}|j d}|j d}	|j d	}
tjjd
d}|r|j|d}|dkr|jdd}n|dkr|jd
d}|dkr|jdd}n|dkr|jd
d}|dkr|jdd}n|dkr|jd
d}|	dkr&|jdd}n|	dkr<|jd
d}|
dkrT|jdd}n|
dkrj|jd
d}| }|||||  }t|d
dj	}t
|ddt ||ddtjdS )Nr\   r^   r_   r`   rb   rc   rd   re   rf   T)featuredrj   rl   Frn   rm   rp   rr   rt   rv   rx   rz   r{   r  r   r   )r   r   rG   r   r   r   r   r   r.   r   rE   r   r   r   r   r  r   r   r   rV     sT    




zQuizTemplateMarket.postNr   r   r   r   r   r    s   r  c                   @   s   e Zd Zdd ZdS )QuizGateWayc                 C   sD  |j }|j}|j}|j}|j}i }t|ddidj|d< t|jj|d< |rjt	|gddj|d< d	|d
< ndt
jj||d}|D ]4}	|	 \}
}|
d k	r~|	jtkr~|	jtkr~t|	 q~t	|ddj|d< d|d
< d |d< |r t|||\}}}}}d|j|||d|jid|d< t|j|d< t |d< t|dd|dtjdS )Nr   Fr   inforh   Trx   historyrJ   Zmax_enter_count)r   r   d   invoicer   r   typer   wagetax
total_cost	meta_databalancer|   rz   r{   r   r   )middleware_quiz_sheetmiddleware_quizr   middleware_institute_studentmiddleware_entrance_typer$   r   r   rh   r7   r   r   r   r   r   r   r   r   rR   r   rY   r   get_last_user_balanceremaining_balancer   r   rE   r   r   )r   r   r   r   r   institute_studententrance_typer   r   Zsheetr   r   r  institute_sharewikiazma_sharer  r  r   r   r   rV   O  s6    


zQuizGateWay.postNr   r   r   r   r   r  K  s   r  c                   @   s   e Zd Zdd ZdS )QuizSheetReportc                 C   s   |j }|j}|j}|j}|j}|d kr<t|dddtjdS | \}}|d k	rl|j	t
krl|j	tkrlt| t|j}	d|	i}
t|dd|
dtjdS )	Nr   r   r   r   r   rz   r{   r   )r  r  r   r  r  rE   r   r   r   r   r   r   r   r=   r   r   )r   r   r   r   r   r   r!  r   r   r   r   r   r   r   rV     s    
zQuizSheetReport.postNr   r   r   r   r   r$  ~  s   r$  )error_if_quiz_sheet_is_noneZprocess_quiz_statusc                   @   s   e Zd Zdd ZdS )	QuizEnterc           
      C   s   |j }|j}|j}|j}|j}d}|dkr6|d kr6d}|sFt||d}|jtkr|jd kr`g |_|j	|j t
|_t |_|  |rt||| t|j}t|j}	t|dd||	t ddtjd	S )
NFZPublicTr   rz   r{   )r   r   r|   r   r   )r  r  r   r  r  rD   r   r   statsr   r   r   r   entrance_dater   rS   r'   r   r$   rE   r   r   )
r   r   r   r   r   r   r!  Z
should_payr   r   r   r   r   rV     s8    




zQuizEnter.postNr   r   r   r   r   r&    s   r&  )r%  c                   @   s   e Zd Zdd ZdS )	SetAnswerc              
   C   s  |j }|j}|j}|j}|jd}t }|D ]~}| |d< |	|d }	|	d krX|	d t
kr\d|krtdd|d  dig }
|d D ]}||
krtddt| d	 t|	d  i|
| ||	d
  krtddt| d t|	d  d t|	d
   it|
|	d d krtdd|	d d  dt|
 diqn|	d tkr:d|krtdd|d  id|krtdd|d  it|d tk	rtddit|d tk	rtddit|d |	d d krt |d tkrHtdddt intddi|jD ]T}|d |d krN|jjst|ddi d tjd!    S |j|  qqN|j| q0|  t|d"d#i d tjd!S )$Nuser_inputsanswer_timeindexquestion_typeselected_choicesz5selected_choices is required for question with index=.zduplicate choice=z4 in the list of selected_choices for question_index=choiceszanswer_choice=z9 was not found in the list of choices for question_index=z. choices are input_rulesmax_selectable_choiceszmax_selectable_choices is z but you have selected z choicesZanswer_textz0answer_text is required for question with index=Zanswer_text_formatz7answer_text_format is required for question with index=zanswer_text  must be a stringz$answer_text_format  must be a stringmax_charactersquestion_text_formatz&question_text_format should be one of z, z8set_answer is not implemented for your question type yetr   z&You cannot answer this question again.r   r   rz   r{   )r  r  r   r  r   r   r   r   	isoformatget_question_by_indexr   r   ValidationErrorr   r   keysr   r   r  r   join_quizee_inputs_sheetr   ro   rE   r   HTTP_400_BAD_REQUESTr   r   r   )r   r   r   r   r   r   r*  r+  Znew_user_inputquestionZuser_input_chosen_indexesZchosen_indexZold_user_inputr   r   r   rV     s    




 


 



zSetAnswer.postNr   r   r   r   r   r)    s   r)  c                 C   s   t | }| jd krg | _| j| j t| _t | _t| |\}}}|d k	sZ| j	j
tkr|| _zt|d| _W n   d| _Y nX | j| j t| _|   |S )Nr   )rQ   r'  r   r   r   r   r   finished_atrP   r   r   r   r   roundfinal_scorer   r   )r   Zcorrections_listr   Ztotal_scoremax_positive_scorer   r   r   r     s"    

r   c                   @   s   e Zd Zdd ZdS )FinishQuizSheetc              	   C   sJ   |j }|j}|j}|j}t|}t|dd|j|j||jj	ddt
jdS )Nrz   r{   )r@  r   rA  r   r   r   )r  r  r   r  r   rE   r@  r   r   r   r   r   )r   r   r   r   r   r   rA  r   r   r   rV   >  s    zFinishQuizSheet.postNr   r   r   r   r   rB  9  s   rB  c                   @   s   e Zd Zdd ZdS )Invoicec              	   C   sn   |j }|j}|j}|j}t|||\}}}}	}
ddd|j|	|
|d|jidt|j	dd}t
||tjdS )	Nrz   r{   r   r   r  )r  r  r   r   )r  r  r   r  rR   r   rY   r   r  r  rE   r   r   )r   r   r   r   r   r   r  r"  r#  r  r  r   r   r   r   rV   T  s    

zInvoice.postNr   r   r   r   r   rC  O  s   rC  )rU   c                   @   s   e Zd Zdd ZdS )GenerateQuizSheetc                 C   s  |j d}|j d}|j d}|j d}|j d}|j d}|rztjj|j|d}W q   t|dd	d
tjd Y S X nV|rztjj|j|d}W q   t|dd	d
tjd Y S X nt|ddd
tjdS zt	jj|j|d}	W nV   z"t
jj|d}
t	jj|
jd}	W n&   t|ddd
tjd Y  Y S X Y nX t|	||||d}t|j}t|ddd|idtjdS )Nwikiazma_institute_student_id"referer_institute_student_identitywikiazma_quiz_idallowed_start_atallowed_finish_atr   )rh   rY   r   zInstitute Student not foundr   r   )rh   referer_identityz]either wikiazma_institute_student_id or referer_institute_student_identity should be providedri   rW   Quiz not found)r   rH  rI  r   rz   r{   r   r   )r   r   r   r   r   rE   r   r   r;  r   r   r   rX   rD   r5   r   r   )r   r   rE  rF  rG  rH  rI  r   r   r   examr   r   r   r   r   rV   f  sZ    



& 
zGenerateQuizSheet.postNr   r   r   r   r   rD  c  s   rD  c                   @   s   e Zd Zdd ZdS )GetQuizIdFromExamIdc                 C   s   |j d}t| ztjj|d}W n"   t|dddtjd Y S X t|j t	jj
|j|jd}t|dkrt|dddtjdS t|d	krt|dd
dtjdS |d }t|ddd|jidtjdS )Nwikiazma_exam_idri   r   rK  r   r   )rX   r   r   rJ   zMore Than one Quiz foundrz   r{   r   r   )r   r   rH   r   r   rE   r   r   rX   r   r   
start_dater   rY   r   )r   r   rN  rL  r~   r   r   r   r   rV     s$    
zGetQuizIdFromExamId.postNr   r   r   r   r   rM    s   rM  c                   @   s   e Zd Zdd ZdS )InstituteStudentVerifyQuizSheetc                 C   s   |j d}ztjj|j|d}W n"   t|dddtjd Y S X | \}}|d k	rv|j	t
krv|j	tkrvt| t|j}d|i}t|dd	|d
tjdS )Nr   )Zquiz__institute
referer_idr   r   r   r   r   rz   r{   r   )r   r   r   r   r   rE   r   r   r   r   r   r   r   r0   r   r   )r   r   r   r   r   r   r   r   r   r   r   rV     s    
z$InstituteStudentVerifyQuizSheet.postNr   r   r   r   r   rP    s   rP  rQ  c                   @   s   e Zd Zdd ZdS )QuizSheetCorrectionAddc              
      sR  |j d |j d}|j d}|j d}|j}|j}|jtksR|jtkr8tjj	| d}|rz|j
||||d nz2 fdd|jd	 D d
 }tjj|d d}	W n"   t|dddtjd Y S X d}
z$ fdd|jD d
 }|rd}
W n   Y nX tjj|| ||	|
||d t|dddtjdS t|dddtjdS d S )Nr,  scorecomment_for_studentcomment_for_other_correctors)r   question_index)rS  rT  rU  	correctorc                    s   g | ]}|d   kr|qS r,  r   )r   r<  rX  r   r   r     s      z/QuizSheetCorrectionAdd.post.<locals>.<listcomp>	solutionsr   question_idri   	not_foundzQuestion Not Foundr   r   Fc                    s   g | ]}|d   kr|qS rX  r   )r   itemrX  r   r   r     s      T)r   rW  rV  rS  r<  blankrT  rU  rz   r{   r   zQuiz not finished yet.)r   r   r   r   r   r   r   r   r   r   update_solutions_sheetr   rE   r   r   r:  r   r   HTTP_403_FORBIDDEN)r   r   rS  rT  rU  r   callerZcorrections_queryZselected_question_recordr<  r]  Zuser_input_recordsr   rX  r   rV     sL       zQuizSheetCorrectionAdd.postNr   r   r   r   r   rR    s   rR  N)django.db.modelsr   django.utilsr   django.utils.decoratorsr   r   rest_frameworkr   r   rest_framework.viewsr   authenticate.middlewarer	   collaboratorsr
   drcollaborators.middlewarer   Zexam.modelsr   institute.modelsr   r   institute.serializersr   payment.modelsr   question.modelsr   r   r   r   r   r   quiz.modelsr   r   r   r   r   r   r   r   r   Zquiz.serializersr   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   Z
quiz.utilsrD   utils.myresponserE   utils.utilsrF   rG   rH   wikiazma.middlewarerI   Zblueprint.blueprintrK   Zblueprint.rulerL   
middlewarerM   rN   rO   utilsrP   rQ   rR   rS   Zauthorizator_decoratorserializer_decoratorZpermission_decoratorZentrance_validator_middlewareZquiz_purchase_middlewareZquiz_sheet_status_validation__PERMISSION_READ_EXAM__r[   r   r   __PERMISSION_READ_EXAM_PAGE__r   r   r   r   __PERMISSION_WRITE_EXAM____PERMISSION_READ_QUESTION__ __PERMISSION_READ_QUESTIONBANK__r   r   r   r   r   r  r  !__PERMISSION_READ_EXAM_TEMPLATE__r  r	  r
  "__PERMISSION_WRITE_EXAM_TEMPLATE__r  r  r  r$  r&  r)  r   rB  rC  rD  rM  rP  rR  r   r   r   r   <module>   sH  ,H%%$  1G <  B<1$[.