
    Fi                    ,   d Z ddlmZ ddlZddlZddlmZ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 dd	lmZ dd
lmZ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!m"Z"m#Z#m$Z$m%Z% ddl&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- dZ.ddZ/h dZ0ddZ1 G d d      Z2y)z;Plantillas de pruebas informales reutilizables por colegio.    )annotationsN)datedatetime)Path)AnyDictListOptional)escape)Session)colors)	TA_CENTER
TA_JUSTIFYTA_LEFT)A4)getSampleStyleSheetParagraphStyle)cminch)SimpleDocTemplate	ParagraphSpacerTable
TableStyle)FolderModelInformalTestTemplateModel!InformalTestTemplateQuestionModelInformalTestSubmissionModelStudentAcademicInfoModelStudentModelStudentPersonalInfoModel+   c                :    t        | d      S t        |             S )zOEscape text for ReportLab Paragraph (XML subset); prevents errors on <, &, etc. )r   str)values    Y/var/www/pie360backend.cl/public_html/app/backend/classes/informal_test_template_class.py_reportlab_paragraph_textr(   !   s    "663u:66    >   r   number	long_text
short_textsingle_choicemultiple_choicec                V    | y t        | d      r| j                         S t        |       S )N	isoformat)hasattrr0   r%   )vs    r'   _isor3   0   s)    yq+{{}q6Mr)   c                      e Zd ZddZddZddZddZddZddZddZ	ddZ
dd	Zdd
ZddZddZddZd dZddZ	 	 d!	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d"dZd#dZd$dZd$dZy)%InformalTestTemplateClassc                    || _         y N)db)selfr8   s     r'   __init__z"InformalTestTemplateClass.__init__9   s	    r)   c                    | j                   j                  t              j                  t        j                  |k(  t        j
                  j                  d             S r7   )r8   queryr   filter	school_iddeleted_dateis_)r9   r>   s     r'   _query_templatesz*InformalTestTemplateClass._query_templates<   sD    GGMM34V)33y@)66::4@	
r)   c                   |sg S 	 t        j                  |      }t	        |t
              sg S g }|D ]  }t	        |t              st        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         }|s|sq|j                  |xs ||xs |d        |S # t         j                  t        f$ r g cY S w xY w)Nlabelr$   r&   rC   r&   )jsonloadsJSONDecodeError	TypeError
isinstancelistdictr%   getstripappend)r9   rawarroutxrC   r&   s          r'   _parse_optionsz(InformalTestTemplateClass._parse_optionsE   s    I	**S/C #t$I$& 	KAa&g,"-335Eg,"-335EJJ%%.5IJ	K 
 $$i0 	I	s   C C C c           
        | j                   j                  t              j                  t        j                  |k(        j                  t        j                  j                         t        j                  j                               j                         }g }|D ]k  }|j                  |j                  |j                  xs d|j                  xs dt        |j                        | j                  |j                         d       m |S )Nr$   r,   )idquestion_textquestion_typerequiredoptions)r8   r<   r   r=   template_idorder_byquestion_orderascrU   allrN   rV   rW   boolrX   rS   options_json)r9   rZ   rowsrQ   rs        r'   _questions_for_templatez1InformalTestTemplateClass._questions_for_templateY   s    GGMM;<V5AA[PQX7FFJJLNoNrNrNvNvNxySU	 	 %' 		AJJ$$%&__%:%&__%D $QZZ 0#221>>B		 
r)   c                   | j                   j                  t              j                  t        j                  |k(        j                         }|sy|j                  xs dj                         }|j                  xs dj                         }|j                  xs dj                         }| d| j                         }| d| j                         S )zUDisplay name from student_personal_data (StudentModel has no given names on the row).r$    )
r8   r<   r!   r=   
student_idfirstnamesrM   father_lastnamemother_lastname)r9   rf   personal_inforh   fathermother	lastnamess          r'   _get_student_display_namez3InformalTestTemplateClass._get_student_display_namem   s     GGMM23V,77:EFUW 	
 $$*113//52<<>//52<<>hax(..0	)%++--r)   c                0   | j                   j                  t              j                  t        j                  |k(        j                         }|r<|j                  xs dj                         r|j                  xs dj                         S | j                   j                  t              j                  t        j                  |k(        j                         }|r<|j                  xs dj                         r|j                  xs dj                         S yNr$   )
r8   r<   r!   r=   rf   rg   identification_numberrM   r    rU   )r9   rf   rk   student_rows       r'   "_get_student_identification_numberz<InformalTestTemplateClass._get_student_identification_number|   s    GGMM23V,77:EFUW 	
 mAAGRNNP!77=2DDFFggmmL188J9VW]]_K==CJJL55;BBDDr)   c                   ||dk(  ry 	 t        |t              r|j                         S t        |t              r|S t        |      j	                         d d }t        j
                  |d      j                         S # t        $ r Y y w xY w)Nr$   
   z%Y-%m-%d)rI   r   r   r%   rM   strptime	Exception)r9   birth_date_rawss      r'   _parse_birth_datez+InformalTestTemplateClass._parse_birth_date   s    !^r%9	.(3%**,,.$/%%N#))+CR0A$$Q
388:: 		s   A< A< ?A< <	BBc           	     j   | j                   j                  t              j                  t        j                  |k(        j                         }|sy| j                  |j                        }|syt        j                         }||kD  ry|j                  |j                  z
  dz  |j                  |j                  z
  z   }|j                  |j                  k  r|dz  }|dz  }|dz  }|dk  rydd}dd}	|dk(  r|dk(  ry| d ||       S |r| d |	|       d| d ||       S | d |	|       S )	z
        Age at PDF build time, as years and months (same idea as in documents).
        Birth date: student_personal_data.born_date
        r$         r   c                    | dk(  rdS dS )Nr~   mesmeses counts    r'   _month_unit_wordzTInformalTestTemplateClass._format_student_age_years_months.<locals>._month_unit_word   s    !QJ53G3r)   c                    | dk(  rdS dS )Nr~   u   añou   añosr   r   s    r'   _year_unit_wordzSInformalTestTemplateClass._format_student_age_years_months.<locals>._year_unit_word   s    "aZ64W4r)   re   )r   intreturnr%   )r8   r<   r!   r=   rf   rg   r{   	born_dater   todayyearmonthday)
r9   rf   rk   
birth_dater   total_monthsyearsmonthsr   r   s
             r'    _format_student_age_years_monthsz:InformalTestTemplateClass._format_student_age_years_months   sN    GGMM23V,77:EFUW 	
 ++M,C,CD




Z__4:ekkJL\L\>\]99z~~%AL""19	4	5 A:{XQ/7899WAoe45Qvha@PQW@X?YZZ/%0122r)   c           	         |j                   |j                  |j                  xs d|j                  xs d| j	                  |j                         t        |j                        t        |j                        dS )Nr$   )rU   r>   namedescription	questions
added_dateupdated_date)rU   r>   r   r   rc   r3   r   r   )r9   rows     r'   _template_to_dictz+InformalTestTemplateClass._template_to_dict   s]    &&HHN??0b55cff=s~~. !1!12
 	
r)   c                   g }t        |xs g       D ]  \  }}t        |t              st        |j	                  d      xs d      j                         }t        |j	                  d      xs d      j                         }t        |j	                  d            }|j	                  d      xs g }|st        d|dz    d      |t        vrt        d	|dz    d
      g }	|dv rt        |t              st        d|dz    d      |D ]  }
t        |
t              st        |
j	                  d      xs d      j                         }t        |
j	                  d      xs d      j                         }|s|sq|	j                  |xs ||xs |d        t        |	      dk  rt        d|dz    d      |j                  |dz   ||||	rt        j                  |	d      nd d        |S )NrV   r$   rW   rX   rY   zLa pregunta #r~   z no tiene texto.u   Tipo inválido en pregunta #.)r-   r.   z requiere opciones.rC   r&   rD      z requiere al menos 2 opciones.Fensure_ascii)r\   rV   rW   rX   r`   )	enumeraterI   rK   r%   rL   rM   r_   
ValueError_VALID_QUESTION_TYPESrJ   rN   lenrE   dumps)r9   r   rQ   iqrV   rW   rX   options_rawrY   oprC   r&   s                r'   _normalize_questionsz.InformalTestTemplateClass._normalize_questions   s   $&io2. !	DAqa&o 6 <"=CCEMo 6 <"=CCEMAEE*-.H%%	*0bK  =Q7G!HII$99 #?Awa!HII,.G DD!+t4$}QUG;N%OPP% WB%b$/ w 526<<>Ew 526<<>E  NNU^eenu#UVW w<!#$}QUG;Y%Z[[JJ&'!e%2%2 (OVDJJwU$K\`3!	D 
r)   c                    | j                  |      j                  t        j                  j	                               j                         }|D cg c]  }| j                  |       c}S c c}w r7   )rA   r[   r   rU   descr^   r   )r9   r>   ra   rb   s       r'   get_allz!InformalTestTemplateClass.get_all   sU    $$Y/889R9U9U9Z9Z9\]aac378a&&q)888s   A*c                    | j                  |      j                  t        j                  |k(        j	                         }|sddd dS d| j                  |      dS )NerrorPlantilla no encontrada.statusmessagedatasuccessr   r   )rA   r=   r   rU   rg   r   )r9   rU   r>   r   s       r'   	get_by_idz#InformalTestTemplateClass.get_by_id   s[    ##I.556O6R6RVX6XY__a%2LVZ[[#T-C-CC-HIIr)   c                   	 t        |j                  d      xs d      j                         }t        |j                  d      xs d      j                         xs d }t        |j                  d      xs d      xs d }t        |j                  d      xs d      xs d}t        |j                  d      xs d      xs d }t        |j                  d      xs d      j                         xs d }|sd	d
d dS | j	                  |j                  d            }	t        j                         }
t        ||||
|
      }| j                  j                  |       | j                  j                          |	D ]G  }| j                  j                  t        |j                  |d   |d   |d   |d   |d   |
|
             I |r| j                  j                  t              j                  t        j                  |k(        j!                         }|r| j                  j                  t"              j                  t"        j$                  |k(  t"        j&                  t(        k(  t"        j*                  j-                  d             j/                  t"        j0                  j3                         t"        j                  j3                               j!                         }| j                  j                  t4              j                  t4        j$                  |k(        j/                  t4        j                  j3                               j!                         }t        |xs d      xs6 t        t7        |dd      xs d      xs t        t7        |dd      xs d      }t        t7        |dd      xs d      xsK t        t7        |dd      xs d      xs/ t        |xs d      xs t        t7        |dd      xs d      xs d }|dvrt        |      j                         nd xsL |r1t7        |dd       r$t        t7        |dd            j                         nd xs t        |
j8                        }t;        |j                  |||t=        j>                  i d      |
|
d       }| j                  j                  |       | j                  j                          | j                  j                  t"              j                  t"        j$                  |k(  t"        j&                  t(        k(        j/                  t"        j0                  j3                               j!                         }|r|j0                  dz   nd}| j                  j                  t#        |||t(        ||j                  |d||
|
d              | j                  jA                          | j                  jC                  |       dd|j                  d S # tD        $ r3}| j                  jG                          d	t        |      d dcY d }~S d }~wtH        $ r3}| j                  jG                          d	t        |      d dcY d }~S d }~ww xY w)!Nr   r$   r   rf   r   professional_idsession_course_idsession_period_yearr   El nombre es obligatorio.r   r   )r>   r   r   r   r   r\   rV   rW   r`   rX   rZ   r\   rV   rW   r`   rX   r   r   r>   	course_idrq   period_yearFr   informal_test_template_idr>   rf   r   answers_jsonr   r   r?   r~   informal_test_submissionr>   r   rf   document_id
version_id	detail_idr   filer   r   r   r?   r   zPlantilla creada.r   r   rU   )%r%   rL   rM   r   r   r   utcnowr   r8   addflushr   rU   r<   r    r=   rg   r   rf   r    INFORMAL_TEST_FOLDER_DOCUMENT_IDr?   r@   r[   r   r   r   getattrr   r   rE   r   commitrefreshr   rollbackrx   )r9   payloadr>   r   r   rf   r   r   r   r   nowr   r   studentlatest_folderstudent_academicresolved_school_idresolved_course_idresolved_period_yearempty_submissionlast_versionnew_versiones                          r'   storezInformalTestTemplateClass.store   s   s	Hw{{6*0b1779Dgkk-8>B?EEGO4KW[[6;!<DJ!'++.?"@"EAFK!O #GKK0C$D$I J Rd"%gkk2G&H&NB"O"U"U"W"_[_")6Q[_``11'++k2JKI//#C+#' C GGKKGGMMO 5$'FF'()9':&'&8&'&8%&~%6!":#&%(	 ''--5<<\__PZ=Z[aack2'22j@'337WW'4488>
 "+"8"8"="="?ATATAVW " &>? 8 C Cz QR!":"="="B"B"DE	 % IN+ LwwQ?D1ELw}k1EJK ' GG[!<AB  w'7aHMAN 05A6  w}k1EJK    ' =PWa<a/0668gk,' S`dkly  |I  KO  ePGM="EFLLN  VZ,' SXX	 )
 (C25&&"4#-(7%)ZZ%G#&%(%)	($ GGKK 01GGMMOk2'22j@'337WW "+"8"8"="="?@ ! DP<#:#:Q#>UVKGGKK#&8&8'1(H'2&6&9&9,;!;(<'*),)-  GGNNGGOOC '4GsvvVV 	HGG%#a&$GG 	HGG%#a&$GG	Hs7   C9W; <S>W; ;	Y1(X2,Y12Y1>(Y,&Y1,Y1c                   	 | j                  |      j                  t        j                  |k(        j	                         }|sddd dS d|v r;t        |j                  d      xs d      j                         }|sddd dS ||_        d|v r5t        |j                  d      xs d      j                         xs d |_	        d|v r| j                  |j                  d            }| j                  j                  t              j                  t        j                  |j                  k(        j                  d	
       t!        j"                         }|D ]G  }| j                  j%                  t        |j                  |d   |d   |d   |d   |d   ||             I t!        j"                         |_        | j                  j)                          dd|j                  dS # t*        $ r3}	| j                  j-                          dt        |	      d dcY d }	~	S d }	~	wt.        $ r3}	| j                  j-                          dt        |	      d dcY d }	~	S d }	~	ww xY w)Nr   r   r   r   r$   r   r   r   F)synchronize_sessionr\   rV   rW   r`   rX   r   r   zPlantilla actualizada.r   )rA   r=   r   rU   rg   r%   rL   rM   r   r   r   r8   r<   r   rZ   deleter   r   r   r   r   r   r   rx   )
r9   rU   r   r>   r   r   r   r   r   r   s
             r'   updatez InformalTestTemplateClass.updateo  s   &	H''	299:S:V:VZ\:\]cceC")6PZ^__ 7;;v.4"5;;=&-:U_cdd'"%gkk-&@&FB"G"M"M"O"WSWg% 55gkk+6NO	?@GG5AASVVK&U&3oo'" AGGKK9(++,-=+>*+O*<*+O*<)*>):%&z]'*),	  (0CGGNN'4LTWTZTZ[[ 	HGG%#a&$GG 	HGG%#a&$GG	Hs=   AG! 	7G! EG! !	I*(HII$(IIIc                   	 | j                  |      j                  t        j                  |k(        j	                         }|sddd dS t        j                         |_        t        j                         |_        | j                  j                          dddS # t        $ r3}| j                  j                          dt        |      d dcY d }~S d }~ww xY w)Nr   r   r   r   zPlantilla eliminada.)r   r   )rA   r=   r   rU   rg   r   r   r?   r   r8   r   rx   r   r%   )r9   rU   r>   r   r   s        r'   r   z InformalTestTemplateClass.delete  s    
	H''	299:S:V:VZ\:\]cceC")6PZ^__'0C'0CGGNN'4JKK 	HGG%#a&$GG	Hs%   AB 	AB 	C#(CCCNc                   	 | j                   j                  t              j                  t        j                  |k(        j                         }|sddd dS | j                   j                  t              j                  t        j                  |k(  t        j                  j                  d             j                  t        j                  j                         t        j                  j                               j                         }	| j                   j                  t              j                  t        j                  |k(        j                  t        j                  j                               j                         }
t        |xs d      xs6 t        t        |dd      xs d      xs t        t        |	dd      xs d      }t        t        |dd      xs d      xsK t        t        |
dd      xs d      xs/ t        |xs d      xs t        t        |	dd      xs d      xs d }|dvrt!        |      j#                         nd xs^ |	r1t        |	dd       r$t!        t        |	dd	            j#                         nd xs' t!        t%        j&                         j(                        }t        |xs d      xs d}| j+                  |      j                  t,        j                  |k(        j                         }|sdd
d dS t%        j&                         }t/        |t0              r|ni }| j                   j                  t2              j                  t2        j4                  |k(  t2        j6                  |k(  t2        j                  |k(  t2        j                  j                  d             j                  t2        j                  j                               j                         }|r+||_        t;        j<                  |d      |_        ||_         n]t3        ||||t;        j<                  |d      ||d       }| j                   jC                  |       | j                   jE                          | j                   j                  t              j                  t        j                  |k(  t        jF                  tH        k(  t        jJ                  |j                  k(  t        j                  j                  d             j                  t        j                  j                         t        j                  j                               j                         }|r+||_        ||_&        ||_        ||_'        d|_(        ||_         n| j                   j                  t              j                  t        j                  |k(  t        jF                  tH        k(        j                  t        j                  j                               j                         }|r|j                  dz   nd}t        |||tH        ||j                  |d|||d       }| j                   jC                  |       | j                   jS                          | j                   jU                  |       dd|j                  dS # tV        $ r3}| j                   jY                          dt!        |      d dcY d }~S d }~ww xY w)Nr   zEstudiante no encontrado.r   r   r>   r   rq   r   r$   r   Fr   r   r   r~   r   r   zRespuestas guardadas.r   )-r8   r<   r    r=   rU   rg   r   rf   r?   r@   r[   r   r   r   r   r   r%   rM   r   r   r   rA   r   rI   rK   r   r   r>   r   rE   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   r   )r9   rZ   r>   rf   r   answersr   r   r   r   r   r   r   r   resolved_professional_idtemplater   r   r   linked_folderr   r   
folder_rowr   s                           r'   submit_answersz(InformalTestTemplateClass.submit_answers  s   A	Hl+:56 
 ")6Q[_`` k***j8,,006 +005579L9L9NO  670;;zIJ255::<=	  IN# DwwQ7<1=Dw}k1=BC  GG[!49: w/a@EAF(-A. w}k1=BC   5Hz4Y'(..0_c$- KX\cdq  tA  CG  ]HGM="=>DDF  NR$- X__&++,	 !
 (+?+?a'@'EA$,,-?@GGHaHdHdhsHstzz|H")6PZ^__//#C!+GT!:gG9:/II[X/99=OO/::jH/<<@@F	 588==?@  &>##'::gE#J #& 1.90)$<!%G%!H"!$!%	 C  k***j8++/OO))SVV3,,006	 +005579L9L9NO  *<'*<'0H-,@)%?"-0* GGMM+.V#..*<#//3SS Xk4499;<UW  @L|66:QR(00) @*!ff$<3 4"!$!%
 J'GGNNGGOOC '4KSVSYSYZZ 	HGG%#a&$GG	Hs,   AZ- J1Z- 	N#Z- -	[)6([$[)$[)c                $   | j                   j                  t        t              j	                  t        t        j
                  t        j                  k(        j	                  t        t        j                  t        j
                  k(        j                  t        j                  |k(  t        j                  |k(  t        j                  j                  d       t        j                  j                  d       t        j                  |k(  t        j                  t        k(  t        j                  j                  d             j!                  t        j
                  j#                               j%                         }i }|D ]z  \  }}t'        |j
                        }||v r |j
                  |j
                  |j(                  xs d|j
                   |j*                  xs dt-        |j.                        d||<   | t1        |j3                               S )NzPrueba r$   )submission_idrZ   r   r   r   )r8   r<   r   r   joinrU   r   r   r   r=   r>   rf   r?   r@   r   r   r[   r   r^   r   r   r   r3   r   rJ   values)r9   r>   rf   ra   latest_by_template
submissionr   t_ids           r'   get_student_submissionsz1InformalTestTemplateClass.get_student_submissions2  s   GGMM57PQT)),,0K0e0ee T%%)D)G)GG V+55B+66*D+88<<TB)66::4@&&*4''+KK((,,T2 X14499;<SU) 	, 9;$( 
	 Jx{{#D))!+'{{ @78;;-)@'339r":#8#89(t$	
	 &--/00r)   c                ~   | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(  t        j                  |k(  t        j                  j                  d             j                  t        j                  j                               j                         }|sdd dS 	 t        j                  |j                  xs d      }t%        |t&              si }d|j                  |t)        |j*                        ddS # t        j                   t"        f$ r i }Y Uw xY w)Nr   r   {})rU   r   r   )r8   r<   r   r=   r>   r   rf   r?   r@   r[   rU   r   rg   rE   rF   r   rG   rH   rI   rK   r3   r   )r9   r>   rZ   rf   r   r   s         r'   get_latest_submission_answersz7InformalTestTemplateClass.get_latest_submission_answersW  s   GGMM56V+55B+EET+66*D+88<<TB	 X14499;<UW 	 '66	jj!1!1!9T:G '4(Gff" $S%5%5 6
 	
	 $$i0 	G	s   #D D<;D<c                t   | j                   j                  t              j                  t        j                  |k(  t        j
                  |k(  t        j                  j                  d            j                  t        j                  j                               j                         }|sddddS t        |j                  xs d      xs t        |xs d      }|sddddS | j                  |      j                  t        j                  |k(        j                         }|sddddS 	 t!        j"                  |j$                  xs d      }t+        |t,              si }| j/                  |      }| j1                  |      }	| j3                  |      }
|j4                  xs d	j7                         xs d
}| j9                  |      }	 t;        j<                  dd      }t?        |j4                        }|jA                          tC        tE        |      tF        dtH        z  dtH        z  dtH        z  dtH        z        }tK               }tM        d|d   dtO        jP                  d      dtR        d      }tM        d|d   dtO        jP                  d      dddtT        tO        jP                  d      d
      }tM        d|d   dtO        jP                  d      tV        d !      }dCd"}d#tH        z  d$tH        z  g}g }|jY                  t[        t]        |      |             |jY                  t_        d%d&t`        z               |jY                  t[        d'|             |jY                  t_        d%d(t`        z               d)t[        t]        |	xs d*      |      gd+t[        t]        |xs d*      |      gd,t[        t]        |
xs d*      |      gd-t[        t]        tc        jd                         jg                  d.            |      gg}ti        ||/      }|jk                   |              |jY                  |       |jY                  t_        d%d0t`        z               |jY                  t[        d1|             |jY                  t_        d%d(t`        z               g }|s&|jY                  d2t[        t]        d3      |      g       tm        |d%      D ]<  \  }}tE        |jo                  d4      xs d5|       }|jo                  |      }t+        |tp              rGd6js                  |D cg c]'  }tE        |      j7                         stE        |      ) c}      xs d*}n6|2tE        |      j7                         rtE        |      j7                         nd*}|jo                  d7      xs d	j7                         xs d*} |jY                  d8| d9t[        t]        |       |      g       |jY                  d:t[        t]        |      |      g       ? ti        ||/      }!|!jk                   |              |jY                  |!       |ju                  |       d>| d?| d}#d@tE        |      |#dAdBS # t         j&                  t(        f$ r i }Y :w xY wc c}w # tv        $ r}"dd;tE        |"       d<dd=cY d}"~"S d}"~"ww xY w)Du   
        Genera PDF de la última submission del estudiante para la plantilla.
        No exige que school_id coincida con el del estudiante: se toma el de la submission (o respaldo).
        Nr   z7No se encontraron respuestas para generar el documento.r   r   u3   No se pudo determinar el colegio de la evaluación.r   r   r$   	DocumentoFz.pdf)r   suffixr   )pagesizerightMargin
leftMargin	topMarginbottomMarginInformalPdfTitleHeading1   z#000000   Helvetica-Bold)parentfontSize	textColor
spaceAfter	alignmentfontNameInformalPdfSectionNormalr}      z#E8E8E8   )	r  r  r  r  spaceBeforer  r  	backColorborderPaddingInformalPdfNormalrv      )r  r  r  r  leadingc                     t        dddt        j                  d      fdddt        j                  fddd	d
dddddt        j                  fdg	      S )N
BACKGROUNDr   r   r   z#f0f0f0	TEXTCOLORr  r  )ALIGNr  r  LEFT)FONTNAMEr  r  r  )FONTSIZEr  r  rv   )BOTTOMPADDINGr  r     )
TOPPADDINGr  r  r  GRIDr~   )VALIGNr  r  TOP)r   r   HexColorblackr   r)   r'   _table_stylezGInformalTestTemplateClass.generate_submission_pdf.<locals>._table_style  s]    !%vw	8RS$fhE;G:>;1fllC;
 r)         r~   g333333?u   I. IDENTIFICACIÓNg333333?zRUT:-zEstudiante:zEdad:zFecha:z%d/%m/%Y %H:%M)	colWidthsg      ?zII. RESPUESTAS DEL CUESTIONARIOzNota:z.Esta plantilla no tiene preguntas registradas.rU   q_z, rV   z	Pregunta :z
Respuesta:zError al generar el PDF: i  )r   r   http_statusr   informal_test__r   )	file_pathfilenamer   )r   r   )<r8   r<   r   r=   r   rf   r?   r@   r[   rU   r   rg   r   r>   rA   r   rE   rF   r   rG   rH   rI   rK   ro   rt   r   r   rM   rc   tempfileNamedTemporaryFiler   closer   r%   r   r   r   r   r   r$  r   r   r   rN   r   r(   r   r   r   r   strftimer   setStyler   rL   rJ   r   buildrx   )$r9   r>   rZ   rf   r   resolved_schooltemplate_rowr   student_namestudent_identification_numberstudent_ageheader_titler   tmptmp_pathdocstylestitle_stylesection_stylenormal_styler&  
col_widthsstory	meta_rows
meta_tablequestion_rowsidxquestionkeyrO   rR   r&   rV   questions_tabler   r1  s$                                       r'   generate_submission_pdfz1InformalTestTemplateClass.generate_submission_pdft  s    GGMM56V+EET+66*D+88<<TB
 X14499;<UW 	 %2kuyzzj227a8OC	Q<O%2gquvv !!/2V-00K?@UW 	
 %2LVZ[[	jj!8!8!@DAG '4(G55jA(,(O(OPZ([%;;JG$))/R668GK00=	E	--U6JCCHH~HIIK $HFr6b&VC )*F("j) //)4#)K +$h' //)4)! //)4M *#h' //)4$L b&"r'*JELL#<\#JKXYLL3:./LL#7GHLL4$;/0 #<=Z=a^a#bdpqr	*CLDWTW*XZf gh78JsK\Z
 1(,,.2I2IJZ2[\$$I yJ?J/LL$LL4$;/0LL#DmTULL4$;/0')M$$!";<l"mo{| "+9a!8 X(,,t,:"SE
;kk#&c4( IIs&M!c!fllns1v&MNURUE03CHNNDTCHNN,Z]E!)o!>!D" K K M TQT$$#C5*!";M"JLY $$$!";E"BLQ* $MZHO$$\^4LL)IIe $J<qTB ]$
 	
i $$i0 	G	j 'N,  	!6s1vh?"	 	sJ   +#Y* MZ #Z
Z
DZ *Z	Z	Z 	Z7Z2,Z72Z7)r8   r   )r>   r   )rO   Optional[str]r   zList[Dict[str, str]])rZ   r   r   List[Dict[str, Any]])rf   r   r   r%   )ry   r   r   zOptional[date])r   r   r   Dict[str, Any])r   zOptional[List[Dict[str, Any]]]r   rP  )r>   r   r   rP  )rU   r   r>   r   r   r   )r   rQ  r>   r   r   r   )rU   r   r   rQ  r>   r   r   r   )NN)rZ   r   r>   r   rf   r   r   Optional[int]r   rQ  r   rR  r   rO  r   r   )r>   r   rf   r   r   rP  )r>   r   rZ   r   rf   r   r   rQ  )__name__
__module____qualname__r:   rA   rS   rc   ro   rt   r{   r   r   r   r   r   r   r   r   r   r   r   rN  r   r)   r'   r5   r5   8   s    
((.&3P	
$L9JtHl'HRH( ,0-1KHKH KH 	KH
 'KH  KH )KH +KH 
KHZ#1J
:z
r)   r5   )r&   r   r   r%   )r2   r   r   rO  )3__doc__
__future__r   rE   r2  r   r   pathlibr   typingr   r   r	   r
   xml.sax.saxutilsr   sqlalchemy.ormr   reportlab.libr   reportlab.lib.enumsr   r   r   reportlab.lib.pagesizesr   reportlab.lib.stylesr   r   reportlab.lib.unitsr   r   reportlab.platypusr   r   r   r   r   app.backend.db.modelsr   r   r   r   r   r    r!   r   r(   r   r3   r5   r   r)   r'   <module>rc     sp    A "   #  , , # "   > > & D ( V V   $&  7
 v
 v
r)   