o
    Dj                     @   s8  d dl mZ d dl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 d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZmZ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% d dl&m'Z( d dl)Z)G dd deZ*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1d d! Z2dS )"    )BytesIO)Canvas)A4	landscape)Table
TableStyleImageFrame	Paragraph)ParagraphStyle)get_object_or_404)HttpResponse)RESOURCES_ROOT
MEDIA_ROOT)GroupeColleMatiereColleurNoteECTSEleveConfigClasse)cm)utils)	unidecode)join)ElementTreeNc                   @   s@   e Zd ZdZeddddfddZdd	d
ZdddZdd ZdS )easyPdfua   classe fille de canvas avec des méthodes supplémentaires pour créer le titre et la fin de pageportraitr    c                 O   sX   || _ || _|| _|| _d | _| _|dkrt| j| _t | _t	j
| | j| jd dS )u:   initialise la page en définissant le format et les margesr   r   )pagesizeN)titreformatmarge_xmarge_yxyr   r   bufferr   __init__)selfsizeorientationr#   r$   r!   argskwargs r.   !/home/reyt/e-colle-new/pdf/pdf.pyr(      s   zeasyPdf.__init__   r1   r1   Tc                 C   s   |r|  d| | |d |d |d  | | j| j||dd | ddd |  j|d 7  _|  j|d |d  7  _| | j| j| |  j|d 7  _|  j|d |d  8  _|so|  j|8  _|  j|8  _dS dS )u   dessine un rectangle de largeur largeur et de hauteur hauteur contenant le texte texte centré,		 avec comme couleur de fond couleur, taille de caractère fontsize et modifie les coordonnées x et y du curseurHelvetica-Boldr   r1         N)setFontsetFillColorRGBrectr%   r&   drawCentredString)r)   textelargeurhauteurfontsizecouleurdroiter.   r.   r/   texteRectangle    s   zeasyPdf.texteRectangle   Fc                 C   s   | j d d | _| j d | j | _| dd | | j| j| j |  jd8  _| | j| jtj	 j
 |ry|  jd8  _| ddd | | j| j| j d d| j  ddd | ddd |  jd	7  _| | j| j| |  jd	8  _d
S d
S )u7   débute la page en inscrivant le titre et le sous-titrer   r3   r1   r2      r@            ?   N)r"   r%   r$   r&   r5   r8   r!   r   objects
get_confignom_etablissementr6   r7   r#   )r)   
hauteurcel	soustitrer.   r.   r/   debutDePage1   s   (zeasyPdf.debutDePagec                 C   sL   | j d d | _| j| _| dd | | j| jd |   |   dS )u8   termine la page en inscrivant le numéro de page en bas r   r3   Helvetica-Oblique   u
   page n°{}N)r"   r%   r$   r&   r5   r8   getPageNumbershowPage)r)   r.   r.   r/   	finDePageB   s
   zeasyPdf.finDePageN)r0   T)r@   F)	__name__
__module____qualname____doc__r   r(   r?   rJ   rO   r.   r.   r.   r/   r      s    

r   c           
      C   s  t t| d}tjj|dd }tdd}dt	|j
}d||d< td	d
|j
ddd}t|D ]\}}|d dkr]|dkrH|  |  |j|_|jd |j dt  |_|jrxt|j}dt |_dt |_|||j|j |dd ||jdt  |jdt  |jjd d   |dd ||jdt  |jdt  |jjd d   |d dkr|dkr|  |  |j|_|jd |j dt  |_q6| jdt 8  _|j|_q6| jdt 7  _q6|  |   |j!" }	|j!#  |$|	 |S ) Npkclasseuserapplication/pdfcontent_typeztrombinoscope_{}.pdfattachment; filename={}Content-Dispositionr   zTrombinoscope de {}   r+   r!   r#   r$   2   r   r1   gffffff@ffffff@g @r2   rL   g?gffffff?   	Helveticaffffff?r@   
   	   1   g@g@)%r   r   r   rE   filterselect_relatedallr   r"   r   nomr   	enumeraterN   rJ   r#   r%   r$   r   r&   photor   
drawHeight	drawWidthdrawOnr5   r8   rX   	last_nameupper
first_nametitlesaver'   getvalueclosewrite)
	id_classerW   elevesresponse
nomfichierpdfieleveIfichierr.   r.   r/   trombinoscopePdfJ   sJ   



22



r   c           3         s
  t j| ||\}}}}t|}tjj| |j|jfd }t }|D ].}	t	|	j
dd dd }
t	|	j
dd dd }t	|	j
dd dd }|
||f||	j< q#g d}td	d
}dt| j|j|j}d||d< tdd| j|j|jddd}| }t|d d d d}td| |  }t|jd d|j  d t|d d}|jd d d|j  d }t|}t|}td|dD ]}d}d}d}td||D ]}d}t||| td|| }|jdd tg d}fddtd| D }|dkr0|| |d d< |kr#|dddf }|8 }n|dd|df |}d}|k rl|| d  }|| |d |d < |d|d dft||| d!  df ||| d! 7 }|d7 }|k s5|dkru| }d"|d d< d#|d d< tD ]'} |||   j}!d$|!d |!d |d | d < |||   j|d | d < qt|| D ]}"t||| D ]}#d%t||#  |d|# |  d< ||# |" }$|$d& r]|$d' d(krd)| |||$d*  |$d' |d|# |  d|" | < n?|$d+ r$d)| |||$d*  |   |$d+  |d|# |  d|" | < nd,| |||$d*  |d|# |  d|" | < |d-d|" | d|# | fd|" | d|# | f||$d.   qqt!|dg|g  d| |g d/}%|%"| |%#|dd\}&}'|%$||jd |& d |j%|' |j%|j |' d   |&  qqd0}(|'d1|( |jd d|j  d2 }|jd d|j  d d3 }t(j) j*})| j+r|j|)k r|j| j+sd4nd5d tt,jj| d6  t }*td|*d2D ]td2|*  fd7dtD g}|fd8dtdD 7 }t D ].}+d}, |+ j-. D ]!}-|,d7 },d9|-j/j01 |-j/j23 |   |-j4 ||, |+ < q*qtg d:}t!||g |gd; d/}%|%"| |%#|dd\}&}'|%$||jd |& d |j%|' d0  | j%|'d0 8  _%q|&  | j+rX|j|)krX|j| j+sd4nd<d tt,jj| d=  t }*td|*d2D ]td2|*  fd>dtD g}|fd?dtdD 7 }t D ].}+d}, |+ j5. D ]!}-|,d7 },d9|-j/j01 |-j/j23 |   |-j4 ||, |+ < qqtg d:}t!||g |gd; d/}%|%"| |%#|dd\}&}'|%$||jd |& d |j%|' d0  | j%|'d0 8  _%q|&  tjj| | |j|jfd@ }tdA|jd d|j  t| d }dB}|D ](}	t jj| |	|j|jfdC6dD  }.t||jd d|j  dE |. }q|jdFd |jd | |  d |_7| j%d08  _%dG}(|'d1|( |D ]}	|	j1 |	j8sdHndI|	j8 gg}t jj| |	|j|jfdC6dD 9dJdK}/|/D ].}0t:t;|0dD dL}1|dM|1j/j0sdHn|1j/j0d 1 |1j/j23 | |||1j gg7 }qtdNdOdPdQdRd-dSdT||	j fg}t!|||dU}%|%"| |%#|dd\}&}'|%$||j7|j%|'  | j7|&7  _7q|&  |<  |j=> }2|j=?  |@|2 |S )Vz[Renvoie le fichier PDF du colloscope de la classe classe, entre les semaines semin et semax)colle__creneau__classecolle__semaine__lundi__ranger1   r4               )lundimardimercredijeudivendredisamedirY   rZ   zColloscope_{}_semaine_{}_{}.pdfr\   r]   r   u"   Colloscope {} semaines n°{} à {}r^   r_   r@   r   r3   F   <         zCalendrier des colles)rI   ))GRIDr1   r   r   r1   r   r   r   )r   )r   r1   r   r   r1   r   VALIGNr   r   r   MIDDLEALIGNr   r   CENTREFACEr   r   r2   )SIZEr   r   rf   c                    s   g | ]	}d gd   qS )r   r1   r.   .0r~   )nbCreneauxLocr.   r/   
<listcomp>   s    zPdf.<locals>.<listcomp>SPANr   journbHeureSallez	{}h{:02d}Snbcollesgroupe0z{}:{}
id_colleurid_eleve{}
BACKGROUND
id_matiere	colWidths
rowHeightsre   r2   rD   rA   zGroupes de collez$Groupes de colle du premier semestre)groupeeleve__classec                       g | ]}d   |  qS z	Groupe {}r"   r   groupes	indGrouper.   r/   r          c                       g | ]}d g  qS r   r.   r   nbGroupesLocr.   r/   r          z
{} {} ({}))r   r   r   r1   r   r   r   r   r   r   r   rL   )r   r   )r   r   )333333?r   r      z#Groupes de colle du second semestre)groupe2eleve__classec                    r   r   r   r   r   r.   r/   r      r   c                    r   r   r.   r   r   r.   r/   r      r   )matieresclasser   r      (   )creneau__classematieresemaine__lundi__rangecolleur   zListe des colleursrf   r   z(LV{})colleur__user__last_namecolleur__user__first_namerT   z{}. {} ({})r   r   r   r   r   r   r   )r   r   )Ar   rE   classe2colloscopelistr   rh   r   distinctdictintr=   rU   r   r"   r   rk   numeror   countmaxminr#   r$   lenrangerJ   r   addheuresallestrdictColleurs
dictElevesr   setStylewrapOnrp   r&   rO   r5   r   rF   	semestre2	semestresr   groupeeleverj   rX   rs   rt   rq   rr   idgroupe2elevevaluesr%   lvorder_byr   r   ru   r'   rv   rw   rx   )3rW   seminsemaxjourscreneauxcollessemainesmatierescouleursr   rougevertbleuLISTE_JOURSr{   r|   r}   
nbCreneauxnbPagescreneauxParPage
largeurcelrH   
nbSemaines
indsemaineindjourrestedernierJour
indcreneaunbjoursnbSemainesLoc
LIST_STYLEdatacrenr   icrenisemcolletwhr<   r   	nbGroupesiGroupeielever   
nbcolleurscolleurs
colleur_idr   r   r.   )r   r   r   r   r/   Pdft   s:  
 (



,

  
:
B2@$
6
98
&8
&((&&,J



r  c              
   C   s  t  }t|_dt |_d}t||D ]\}}| s9|r|d r|d r|d dks9|d dks9|d d ur|r?|  |jd	 |j d
t  |_||dt |j | jd8  _|	dd |
|jd d |jd | jd8  _|
|jd d |jd | jd8  _|	dd |
|jd d |jd | jd8  _|
|jd d |jd | jd8  _|
|jd d |jd | jd8  _|	dd |
|jd d |jd|j | jd8  _|
|jd d |jd | jd8  _|	dd  |
|jd d |jd!| | jd"8  _|	dd |dt |jd#|jd$|j  | jd8  _|dt |jd%|j | jd"8  _|	dd |
|jd d |jd&||rr|jjdkrrd'nd(  | jd"8  _tj||
\}}t|}|
|jd d |jd) |	dd* dt| }|dt |jt| | jd"8  _|	dd |
|jd d |jd+ |d, |	dd- |
d-t |jd.|  | jd"8  _|d/ |	dd |dt |jd0| | jd8  _|dt |j|j | jd8  _|
|jd d |jd1|j | jd8  _|dt |jd2| | jd8  _|dt |jd3 | jd8  _|dt |jd4|	  | jd5t 8  _|jd d6t  d|j  |_|r|||j|j |	dd d5t |_|
|jd d |jd7 | jd 8  _|
|jd d |jd8 | jd 8  _|
|jd d |jd9 d:}q|  |j ! }|j "  |S );N      ?Fddninesem1r^   sem2noter1   ?rf   re   Times-Romanr   r   r3   $   MINISTÈRE DE L'ÉDUCATION NATIONALErL   /   DE l'ENSEIGNEMENT SUPÉRIEUR ET DE LA RECHERCHEr2      z$ATTESTATION DU PARCOURS DE FORMATIONENu(   CLASSE PRÉPARATOIRE AUX GRANDES ÉCOLESr   rK      u=   Le recteur de l'académie de {}, Chancelier des universités,r   zatteste querc   rA   r   r`   u   né(e) le {} à {}%d/%m/%Yu   n° INE: {}u7   a accompli un parcours de formation dans la filière {}*r   u1   Valeur du parcours en crédits du système ECTS :r   zMention globale obtenue :r1   r   r      ABCDEFr   u   Année académique: {}u   Fait à {},zle {}zPour le recteur,zLe {}r4   r   u^   Attestation délivrée en application des dispositions de l’article 8 du décret n° 94-1015uF   du 23 novembre 1994 modifié par le décret n° 2007-692 du 3 mai 2007u<   Le descriptif de la formation figure dans l’annexe jointe.T)#r   r   r#   r$   ziprN   r"   r&   rp   r5   r8   academie
drawStringr  strftimeldnrt   r  rW   anneer   rE   moyenneECTSroundr   r   setFillColorrG   villelowerr%   ru   r'   rv   rw   )elevrz   creditsr   I2
datedujourfilierer.  etoile
signatairecubeconfigrW   r}   newpager   creditmoyenner   valeurr   r.   r.   r/   attestationfichier"  s   
D" *<

"


rA  c                 C   s  | j d d}| j d dd }| j d }| j d }| j d }d	}d	}	d
| j v r/| j d
 }d| j v r9| j d }	tj }
dt|d |}tdd}|du rtt	jj
|dddd}dt|jdd}tj|d }n#|g}d	g}td|jj |jj |jj dddd}d||d< tttd}dt |_dt |_|r|dkrzttd }t|}t|}W ng t y   zttd!}t|}t|}W n t y   d	}Y nw Y nCw |r+|d"kr+zttd#}t|}t|}W n) t y*   zttd$}t|}t|}W n t y'   d	}Y nw Y nw d	}|rF|! \}}|| }dt |_d| t |_t"|||||||||||	|
|}|#| |S )%u   renvoie l'attestation ects pdf de l'élève elev, ou si elev vaut None renvoie les attestations ects pdf de toute la classe classe en un seul fichierdater$  rW   _r   	signatureanneescolairer9  Ftamponr;  z{}-{}r1   rY   rZ   NrV   user__last_nameuser__first_namerX   zATTESTATIONS_{}.pdf -ATTESTATION_{}_{}_{}.pdfr%  r\   r]   marianne.jpgr  r4   	Proviseurproviseur.pngproviseur.jpgProviseur adjointproviseuradjoint.pngproviseuradjoint.jpg)$cleaned_datar,  splitr   rE   rF   r"   r   r   r   rh   r   ri   r   rk   replacer   r5  rW   rr   rX   rq   rs   rt   r   r   r   r   rn   ro   r   ImageReader	ExceptiongetSizerA  rx   )formr4  rW   r7  r8  r:  r.  r9  rD  r;  r<  r{   rz   r|   r5  r   pathr6  imglr  ratior   r.   r.   r/   attestationectsu  s   








:






 
r^  c           X         sP  d}t  }|jd d }||_d| |_d}tdddd	d
}tddddd
}tdddddddddd	}g dg dg}tg d}t|d| d| d| d| d| d| gdgd d}|| g dg dg dg dg dg d g d!g d"g d#g	}tg d$}t|d%| d&| d'| d(| d)| d)| gd| gd d}|| d*}t||}d+}t||}d,}t||}d-}t||} d.}t||}!d/}t||}"d0}t||}#d1}t||}$d2}t||}%d3}t||}&d4}t||}'d5}t||}(d6}t||})td7|}*t	||D ]	\}+},| s7|,	r|,d8 	r|,d9 	r|,d: d;kr0|,d< d;ks7|,d= d u	r|r>|
  |jd |j d>|  |_||d| |j | jd?8  _|d@dA |dB| |jdC | jdD8  _|dB| |jdE | jd8  _|dd |dB| |jdF | jd8  _|dGd |dB| |jdH |g}-dI|+jj |+jj |+jsdJn|+jdK|+jsdJn|+j |+j}t||}.|-|.|g dL||	|rdM| dN ndJ|tj jdOdPdQdPdRdP}t||}/|-|/|| |!|"||#g t|d| d| dS| ddddddT	}0|0|-| |$|%|&|'|(g}-dU||}t||}1|-|1|)|*|g td| d| d| dS| ddddddT	}2|2|-| |ro||dV| dW|  |
  |jd |j d |_|dd |dB| |jdX|	|r|j dkrdYndJ  |+j!j dk}3|+j!j dko|+j" }4|+j!j dko|+j"}5d }6|3rt#j$|+\}7}8}9n|4rt#j$|+\}7}8}9}:};}6nt#j$|+\	}7}8}9}:};}6}<}=}>g dZg}?d }@}Ad}Bg }Cd}D|7rJ|?%g d[ |C%|D |Dd7 }D|7D ]<}E|Dd7 }D|?%|Ed |Ed sdJnd\|Ed  |Ed ||Ed]  g |@|Ed |Ed]  7 }@|Ed] d	krF|B|Ed 7 }Bq|B}F|8r|?%g d^ |C%|D |Dd7 }D|8D ]<}E|Dd7 }D|?%|Ed |Ed sqdJnd\|Ed  |Ed_ ||Ed]  g |@|Ed_ |Ed]  7 }@|Ed] d	kr|B|Ed_ 7 }Bq_|7s|8s|9d ur|?%g d` |?%dadbd|9 g |C|Dg7 }C|Dd7 }D|9d urdc}Bdc|9 }@|4s|5r|rd}Gd}Hd}I|:r/|?%g dd |C%|D |Dd7 }D|:D ]<}E|Dd7 }D|?%|Ed |Ed sdJnd\|Ed  |Ed ||Ed]  g |I|Ed |Ed]  7 }I|Ed] d	kr+|G|Ed 7 }Gq|G}H|;r|?%g de |C%|D |Dd7 }D|;D ]<}E|Dd7 }D|?%|Ed |Ed sVdJnd\|Ed  |Ed_ ||Ed]  g |I|Ed_ |Ed]  7 }I|Ed] d	kr|G|Ed_ 7 }GqD|:s|;s|6d ur|?%g df |?%dg|Bdckrdbndhd|6 g |C|Dg7 }C|Dd7 }D|5r|sd}Gd}Hd}I|<r|?%g dd |C%|D |Dd7 }D|<D ]<}E|Dd7 }D|?%|Ed |Ed sdJnd\|Ed  |Ed ||Ed]  g |I|Ed |Ed]  7 }I|Ed] d	kr	|G|Ed 7 }Gq|G}H|=r_|?%g de |C%|D |Dd7 }D|=D ]<}E|Dd7 }D|?%|Ed |Ed s4dJnd\|Ed  |Ed_ ||Ed]  g |I|Ed_ |Ed]  7 }I|Ed] d	kr]|G|Ed_ 7 }Gq"|<s|=s|6d ur|?%g df |?%dg|Bdckr{dbndhd|6 g |C|Dg7 }C|Dd7 }D|6d urdc}Gdc|6 }I|5r}|r}d}Jd}K|<r|?%g di |C%|D |Dd7 }D|<D ]<}E|Dd7 }D|?%|Ed |Ed sdJnd\|Ed  |Ed ||Ed]  g |K|Ed |Ed]  7 }K|Ed] d	kr|J|Ed 7 }Jq|J}L|=rF|?%g dj |C%|D |Dd7 }D|=D ]<}E|Dd7 }D|?%|Ed |Ed sdJnd\|Ed  |Ed_ ||Ed]  g |K|Ed_ |Ed]  7 }K|Ed] d	krD|J|Ed_ 7 }Jq	|<sr|=sr|>d urr|?%g dk |?%dl|Bdckrbdbndmd|> g |C|Dg7 }C|Dd7 }D|>d ur}dc}Jdc|> }Kdn| }Mt&|jd d|j  d]|  |M  g do}Ndp}O|OrH|CD ]}P|P kr fdqdr|CD }Ct|N}Qt|?d   d| ds| d)| g|Mg  d}R|R|Q |R'|dd\}S}T| j|Td	 8  _|jd |S d |_(|R||j(|j |
  |jd |j d |_|? d  }?g dt}N n7|N%dud|Pfd|Pff |N%dvd|Pfd|Pfdf |N%dwd|Pfd|Pfdxf |N%dyd|Pfd|Pfdf qd}O|Ost|N}Qt|?d| ds| d)| g|Mgt)|? d}R|R|Q |R'|dd\}S}T| j|Td	 8  _|jd |S d |_(|R||j(|j | jdz8  _|dd? t#j*|+|\}U}Vt+|U}U|3r#|9d ur|,|j(|jd{||U  n"|Vd d ddgkr|,|j(|jd{||U  n|Vd d dgkr|,|j(|jd|||U  n|Vd d dgkr
|,|j(|jd}||U  n|-d~ |,|j(|jddc|B  |-d n|4s,|5r|sd_|Vv rEd]|Vv rE|,|j(|jd{||U  nd_|Vv rY|,|j(|jd||U  nd]|Vv rm|,|j(|jd||U  nr|-d~ |,|j(|jddc|G  |-d nYd	|Vv rd|Vv r|,|j(|jd{||U  n@d	|Vv r|,|j(|jd||U  n,d|Vv r|,|j(|jd||U  n|-d~ |,|j(|jddc|J  |-d |.|jd |j( d |jd | jd| 8  _|	r|||jd d|j  d_|  t/|jd|  dp}q|0  |j12 }W|j13  |WS )Nr(  r      r  Fnormalrf   r#  r   )namefontSizeleading
spaceAfterresumer!   rA   r'  r2   black)r   r   r3   r   r1   z#DDDDDDr3   )	ra  rb  rc  fontNameborderColorborderPaddingborderWidth	backColorrd  )Au
   Très BienCz
Assez BienEPassable)BBienD
ConvenableFInsuffisant))r   r   r   g?r   r   r   )r   r   r   rc   r   )r   r   r   )?rv  rv  皙?r   )8rr  r      Universitér   r   )7rr  r   ry  r   r   )6rr  r   ry  r   r   )5Mr      Université ou grande écoler   r   )4r}  r   r~  r   r   )3LATSr~  r   r   )2r  STS-IUTr   ry  CPGE)1r  r  r   ry  r  )r   BaczEnseignement secondairer   r   r   ))r   r   )r1   r   rw  r   )r   r4   r   r   r   rw  r   )r   )r   r   r   rL   rw  r   r   r   r   r   )r   r   r   r0   )r   r  )r   r   )r   )r4   r1   )r   r1   )r   )r4   r3   r   r3   )r   r4   r4   )r   r4   )r   )r4   r   r  )r   r4   r   r   r   )r   r3   rD   )r4   rD   )r   )r3   r   r4   r   )r   )r3   rL   r  )r   r  r  z#FABF8F)r   r  r  z#FBD4B4)r   r3   r   r  z#76923C)r   r  r  #FDE9D9)r   )r   rD   )r   r   r  )r   r  r  z#D6E3BC)r   )r   rD   )r   r   z#FF9900gzG?gQ?g      ?gffffff?g      @u   1. Information sur l'étudiantz2. Information sur la formationz,3. Information sur le niveau de la formationu  <b><i>3.1. Niveau de la formation:</i></b><br/>
	Située au sein des études menant au grade de licence.<br/>
	Niveau bac + 2 / 120 crédits ECTS<br/>
	<b><i>3.2. Durée officielle du programme de formation:</i></b><br/>
	La durée du programme est de 2 ans.<br/>
	<b><i>3.3. Conditions d’accès:</i></b><br/>
	Entrée sélective après le baccalauréat s’effectuant dans le cadre d’une procédure nationale d’admission.<br/>
	Cf: <a href="http://www.parcoursup.fr" color="blue">http://www.parcoursup.fr</a>u9   4. Information sur les contenus et les résultats obtenusuf  <b><i>4.1. Organisation des études:</i></b><br/>
	Plein temps, contrôle continu écrit et oral<br/>
	<b><i>4.2. Exigences du programme:</i></b><br/>
	La formation dispensée a pour objet de donner aux étudiants une compréhension approfondie des disciplines enseignées et une appréhension de leurs caractéristiques générales. Elle prend en compte leurs évolutions, leurs applications et la préparation à des démarches de recherche.
	Elle est définie par des programmes nationaux.<br/>
	<b><i>4.3. Précisions sur le programme:</i></b><br/>
	Voir relevé au verso et catalogue de cours<br/>
	<b><i>4.4. Échelle d’évaluation:</i></b><br/>
	L’évaluation prend en compte l’ensemble des travaux des étudiants. La qualité du travail, des résultats obtenus et des compétences acquises est exprimée par une mention conformément au tableau ci-dessous.u   <b><i>4.5. Classification de la formation:</i></b><br/>
	Une mention globale, portant sur l’ensemble du parcours et s’exprimant dans la même échelle qu’en 4.4 figure à la fin du relevé.z25. Information sur la fonction de la qualificationu%  <b><i>5.1. Accès à un niveau d’études supérieur:</i></b><br/>
	Accès par concours aux grandes écoles.<br/>
	Accès, par validation de parcours, à tout type d’établissement d’enseignement supérieur.<br/>
	<b><i>5.2. Statut  professionnel (si applicable):</i></b><br/>
	Sans objetu    6. Informations complémentairesu
  <b><i>6.1. Informations complémentaires:</i></b><br/>
	Catalogue des cours et arrêtés ministériels définissant les programmes consultables sur :<br/>
	<a href="http://www.enseignementsup-recherche.gouv.fr/" color="blue">http://www.enseignementsup-recherche.gouv.fr/</a><br/>
	<b><i>6.2. Autres sources d’information:</i></b><br/>
	Pour toute information sur le dispositif CPGE consulter :<br/>
	<a href="http://www.enseignementsup-recherche.gouv.fr/" color="blue">http://www.enseignementsup-recherche.gouv.fr/</a>u#   7. Certification de l’attestationuD   8. Informations sur le système national d’enseignement supérieurz<br/> <br/>r  r  r  r^   r  r  r  re   r  r   g      %@r  rL   r   u*   CLASSES PRÉPARATOIRES AUX GRANDES ÉCOLESrc   z"ANNEXE DESCRIPTIVE DE LA FORMATIONu   <b><i>1.1. Nom:</i></b> {}<br/><b><i>1.2. Prénom:</i></b> {}<br/><b><i>1.3. Date de Naissance:</i></b> {}<br/><b><i>1.4. Lieu de Naissance:</i></b> {}<br/><b><i>1.5. N° INE:</i></b> {}r   r$  u  <b><i>2.1. Nom de la formation:</i></b><br/>
			Classe préparatoire {} {} {}<br/>
			<b><i>2.2. Principaux domaines d’étude:</i></b><br/>
			{}<br/>
			<b><i>2.3. Nom et statut de l’institution gérant la formation:</i></b><br/>
			Ministère de l’enseignement supérieur et de la recherche
			Classes préparatoires aux grandes écoles<br/>
			<b><i>2.4. Nom et statut de l’établissement dispensant la formation:</i></b><br/>
			{}<br/>
			<b><i>2.5. Langue de formation:</i></b> français()
z<br/>z
<br/><br/>   )showBoundaryleftPaddingrightPadding
topPaddingbottomPaddingz<b><i>7.1. Date:</i></b> {}<br/>
			<b><i>7.2. Signature:</i></b><br/><br/><br/><br/>
			<b><i>7.3. Fonction:</i></b> {}<br/>
			<b><i>7.4. Tampon ou cachet officiel:</i></b><br/><br/><br/><br/><br/><br/>g3333330@gffffff*@u!   RELEVÉ DE RÉSULTATS (classe {})r%  )ENSEIGNEMENTSu   Crédits ECTSMention)zPremier semestrer   r   z ({})r   )u   Deuxième semestrer   r   r4   )u   Première annéer   r   u    Mention Globale première année60r   )u   Troisième semestrer   r   )u   Quatrième semestrer   r   )u   Deuxième annéer   r   u    Mention Globale Deuxième année120)u   Cinquième semestrer   r   )u   Sixième semestrer   r   )u   Troisème annéer   r   u!   Mention Globale Troisième année180rd   )r   r   r   rw  r   r   r   )r   r   r3   r   re   r   r   )r   r3   r   LEFTr   r   )r3   r   r   )r   r   r  r   Tc                    s   g | ]
}| kr|  qS r.   r.   )r   r&   nbcelr.   r/   r     s    z!creditfichier.<locals>.<listcomp>ra   )r  r   r   r   r  r  r   r   r   r   r   r@   zMention globale: {}u=   30 crédits validés au premier semestre, Mention globale: {}u<   30 crédits validés au second semestre, Mention globale: {}r&  u%   Pas de mention, il manque {} créditsr   u=   90 crédits validés aux semestres 1,2,3, Mention globale: {}u=   90 crédits validés aux semestres 1,2,4, Mention globale: {}rD   uA   90 crédits validés aux semestres 1,2,3,4,5, Mention globale: {}u@   90 crédits validés aux semestres 1,2,3,4,6 Mention globale: {}r   zCachet et signatureg	@rC   )4r   r"   r#   r$   r   r   r   r   r
   r)  rN   r&   rp   r5   r8   rX   rq   rr   rs   rt   r  r,  r-  r  extendr   rE   rF   nom_adresse_etablissementrU  r	   addFromListr.  rW   r;  r   notePDFappendr   r   r%   r   r/  r0  r+  r1  drawRightStringr   ru   r'   rv   rw   )Xr4  rz   r5  domainebranche	precisionr   r6  r7  r8  r.  r9  r:  r;  rW   
LIST_NOTESr}   r   r=  stylestyleResume
styleTitredata1LIST_STYLE1t1data2LIST_STYLE2t2r9   p1p3p5p6p7p8p9p10p11p12p13p14p16p17r   r>  storyp2p4flp15frannee1annee2annee3ng2r  r  ng1sem3sem4sem5sem6ng3r  spsp1coeff1lignesposr  coeff1acoeff2coeff2asp2coeff3sp3coeff3arH   tabStylecouper%   r  r  r  r  r?  r   r   r.   r  r/   creditfichier  sr  
8
<






	







JJ
@	

&
*4

<
<


<
<"

<
<"


<
<"

$
.
*

  







 2

r  c                 C   s  | j d d}| j d d\}}| j d }| j d }tttd }|d	||
 }	|	d	}
|	d
 }|	d}d}d}d| j v rP| j d }d| j v rZ| j d }tdd}|du rtjj|dddd}d	t|jdddd}tj|d }n"|g}dg}td	|j |jj |jj dddd}d	||d< tttd}dt |_d t |_ |r|d!krzttd"}t|}t!"|}W nh t#y   zttd#}t|}t!"|}W n t#y   d}Y nw Y nCw |rC|d$krCzttd%}t|}t!"|}W n) t#yB   zttd&}t|}t!"|}W n t#y?   d}Y nw Y nw d}|r^|$ \}}|| }d t |_d | t |_ t%||||
|||||||||||}|&| |S )'u   renvoie les crédits ects pdf de l'élève elev, ou si elev vaut None renvoie les crédits ects pdf de toute la classe en un seul fichierrB  r$  rW   rC  rD  r9  classes.xmlclasse[@nom='{}'][@annee='{}']r  typer  FrF  r;  rY   rZ   NrV   rG  rH  rX   ECTS_{}.pdfrI  rJ  r%  r   ECTS_{}_{}_{}.pdfr\   r]   rL  r  r4   rM  rN  rO  rP  rQ  rR  )'rS  r,  rT  etreeparser   r   getrootfindallr"   popgetr3  r   r   rE   rh   r   ri   r   rk   rU  r   r5  rr   rX   rq   rs   rt   r   r   rn   ro   r   rV  rW  rX  r  rx   )rY  r4  rW   r7  r8  r.  r:  r9  tree	classexmlr  r  r  rD  r;  r{   rz   r|   r5  r   rZ  r6  r[  r\  r  r]  r   r.   r.   r/   creditsects4  s   








 8






$
r  c           $      C   sZ  | j d d}| j d d\}}| j d }| j d }tttd }|d	||
 }|d	}	|d
 }
|d}d}d}d| j v rP| j d }d| j v rZ| j d }tdd}tjj|dddd}d	t|jdddd}tj|d }tttd}dt |_dt |_|r|dkrzttd}t|}t|}W ng ty   zttd}t|}t|}W n ty   d}Y nw Y nCw |r|d krzttd!}t|}t|}W n) ty   zttd"}t|}t|}W n ty   d}Y nw Y nw d}|r-| \}}|| }dt |_d| t |_g }d#}t j! }t|jdddd}t"||D ]\}}|r|d$ r|d% r|d& d'krg|d( d'ksn|d) d*urt#d*|||	|
||||||||||}t$d*||||||||||||} td+	|j% |j&j'% |j&j() dddd}!td,	|j% |j&j'% |j&j() dddd}"|*td-	||!|f |*td-	||"| f |d.	|j&j'% |j&j() |j&j+pd/|!|"7 }qH|*d0	t|jddddt,|d1d2f t-|}#t|#d3d}d4	|}d5	||d6< |S )7u   renvoie une archive zip contenant les fichiers à envoyer par mail pour les crédits ECCTS: un csv avec les infos pour le publipostage
	un répertoire avec les crédits et un avec les attestationsrB  r$  rW   rC  rD  r9  r  r  r  r  r  FrF  r;  rY   rZ   rV   rG  rH  rX   r  rI  rJ  r%  r   rL  r  r4   rM  rN  rO  rP  rQ  rR  z%nom,prenom,email,credits,attestation
r  r  r  r^   r  r  Nr  rK  zECTS_{}z{},{},{},{},{}
r   zpublipostage_{}.csvutf8)encodingzapplication/force-downloadzECTS_{}.zipzattachment; filename="{}"r]   ).rS  r,  rT  r  r  r   r   r  r  r"   r  r  r3  r   r   rE   rh   r   ri   r   rk   rU  r   r5  r   r   rn   ro   r   rV  rW  rX  r   rF   r)  r  rA  rr   rX   rq   rs   rt   r  emailbytesgenerate_zip)$rY  rW   r7  r8  r.  r:  r9  r  r  r  r  r  rD  r;  r{   rz   r|   r5  r   rZ  r6  r[  r\  r  r]  fichierscsvr<  	nomclasser   r>  pdf1pdf2nomfichier1nomfichier2fullzipr.   r.   r/   publipostageu  s   








 







D$ 8802
r  c                 C   sd   t  }tj|dtjd}| D ]}||d |d  qW d    | S 1 s)w   Y  | S )Nr  )modecompressionr   r1   )r   zipfileZipFileZIP_DEFLATEDwritestrrv   )filesmem_zipzffr.   r.   r/   r    s   
r  )3ior   reportlab.pdfgen.canvasr   reportlab.lib.pagesizesr   r   reportlab.platypusr   r   r   r	   r
   reportlab.lib.stylesr   django.shortcutsr   django.httpr   ecolle.settingsr   r   accueil.modelsr   r   r   r   r   r   r   r   reportlab.lib.unitsr   reportlab.libr   r   os.pathr   	xml.etreer   r  r  r   r   r  rA  r^  r  r  r  r  r.   r.   r.   r/   <module>   s8   (8* /S?   AL