o
    Djٸ                     @   s^  d dl mZmZmZ d dl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 d dlmZmZmZmZmZ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%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8 d d	l9m:Z:m;Z;m<Z< d d
l=m>Z>m?Z?m@Z@mAZAmBZB d dlCmDZDmEZE d dlFmGZG d dlHmIZImJZJ d dlKZKdZLdd ZMdd ZNdd ZOdd ZPeeMdddd ZQeeMdddd ZReeMdddd ZSeeMddd d! ZTeeMddd"d# ZUeeMddd$d% ZVeeMddd&d' ZWeeMddd(d) ZXeeMddd*d+ ZYeeMddd,d- ZZeeMddd.d/ Z[eeMd0dd{d1d2Z\eeMd0dd3d4 Z]eeMd0dd5d6 Z^eeMd0dd7d8 Z_eeMd0dd9d: Z`eeMd0dd;d< ZaeeMd0dd=d> ZbeeMd0dd?d@ ZceeMd0ddAdB ZdeeMd0ddCdD ZeeeMd0ddEdF ZfeeMd0ddGdH ZgeeMdddIdJ ZheeMdddKdL ZieeMdddMdN ZjeeMdddOdP ZkeeMddd|dQdRZleeMddd|dSdTZmeeMddd}dUdVZneeMddd}dWdXZoeeMddd}dYdZZpeeMd0dd[d\ ZqeeMd0dd]d^ ZreeMd0dd_d` ZseeMd0ddadb ZteeMd0ddcdd ZueeMd0ddedf ZveeOdddgdh ZweeOdddidj ZxeeOdddkdl ZyeeNdddmdn ZzeeNddd{dodpZ{eeNdddqdr Z|eeNdddsdt Z}eeNdddudv Z~eeNdddwdx ZeeNdddydz ZdS )~    )renderredirectget_object_or_404)authenticatelogin)user_passes_test)AdminConnexionFormInformationForm)ECTSFormMatiereECTSForm)MoisFormRamassageFormMatiereClasseSemaineSelectFormColleurSelectForm)ConfigNoteSemaineMatiereColleur	RamassageClasseEleveGroupeCreneaumoisMatiereECTSNoteECTSInformation)mixtegroupemixtegroupesupprmixtegroupeSwapmixtegroupemodifmixtecolloscopemixtecolloscopemodifmixtecreneauduplimixtecreneausupprmixteajaxcompatmixteajaxcolloscopemixteajaxcolloscopeelevemixteajaxmajcolleurmixteajaxcolloscopeeffacermixteajaxcolloscopemultimixteajaxcolloscopemulticonfirmmixteRamassagePdfParClassemixteRamassagePdfParColleurmixteCSVmixtegroupeCreermixtegroupecsvmixteColloscopeImport)Http404HttpResponseHttpResponseForbidden)PdfeasyPdfcreditsectsattestationectspublipostage)Table
TableStyle)	timedelta)MaxMinN   c                 C   s   | j o| jdkS )u>   Renvoie True si l'utilisateur est le secrétariat, False sinon   Secrétariat)is_authenticatedusernameuser rF   +/home/reyt/e-colle-new/secretariat/views.py	is_secret   s   rH   c                 C   s   t | o	tj jS )uN   Renvoie True si l'utilisateur est le secrétariat et ECTS activé, False sinon)rH   r   objects
get_configectsrD   rF   rF   rG   is_secret_ects   s   rL   c                 C   s   t | otj jt@ dkS )u   Renvoie True si l'utilisateur est le secrétariat et ECTS activé avec droits  de modification des matires et des coeffs, False sinonr   )rL   r   rI   rJ   
ects_modifSECRETARIATrD   rF   rF   rG   is_secret_modif_ects   s   rO   c                 C   s   t | jr	tdS d}t| jpdddid}| r2|jd }td|d}|r0t| | tdS d	}d	|j	d j
jd
< t| d||dS )u   Renvoie la vue de la page de connexion du secrétariat. Si le secrétariat est déjà connecté, redirige vers la page d'accueil du secrétariataction_secretFNrC   rA   initialpassword)rC   rS   Treadonlyzsecretariat/home.html)formerror)rH   rE   r   r   POSTis_validcleaned_datar   r   fieldswidgetattrsr   )requestrV   rU   rS   rE   rF   rF   rG   connec   s   


r^   login_secret)	login_urlc                 C   s   t | ddtj iS )u3   Renvoie la vue de la page d'accueil du secrétariatzsecretariat/action.htmlclasses)r   r   rI   all)r]   rF   rF   rG   action/   s   rc   c                 C   sz  t | jpd}| jdkrM| r@|jd }|jd }|jd }|jd }|j| jd< |j| jd< |j| jd< |j| jd< tdS d } } } } }}n^z*tj	j
| jd d}tj	j
| jd d}tj	j
| jd d}tj	j
| jd d}W n ty   d } } } } }}t | jpd}Y nw tj	||||}t|}t ||||d	d
}t| d|||||||tj	 dS )uD   Renvoie la vue de la page de consultation des résultats des classesNrW   classematiereseminsemaxresultats_secretpk)rd   re   rf   rg   rQ   zsecretariat/resultats.html)rU   rd   re   semainesnotesrf   rg   ra   )r   rW   methodrX   rY   rj   sessionr   r   rI   getr   r   	Exceptionr   classe2resultatnextr   rb   )r]   rU   rd   re   rf   rg   rk   
generateurrF   rF   rG   	resultats4   s4   




$rt   c                    s   t t|d}t t|d}t t|d}t t|d}tj||||}	t|	}
tdd}d	|j
|j
|d< t|}|g ddd |
D   d	d
 tdD  d d< d d< |	D ]}||d |d |d g fdd|d D   qZ|S )u   Renvoie le fichier CSV des résultats de la classe dont l'id est id_classe, dans la matière dont l'id est id_matiere
    entre les semaines dont l'id est id_semin et id_semaxri   text/csvcontent_typez*attachment; filename="resultats_{}_{}.csv"Content-Disposition)u   Élèverangmoyennec                 S   s   g | ]}d  |jqS )zS{})formatnumero).0semainerF   rF   rG   
<listcomp>`       zresultatcsv.<locals>.<listcomp>c                 S   s   i | ]}|t |qS rF   )strr}   irF   rF   rG   
<dictcomp>a       zresultatcsv.<locals>.<dictcomp>   zn.n.abs   elevery   rz   c                    s$   g | ]}d   fdd|D qS )|c                    s   g | ]} |d   qS )noterF   )r}   r   notationrF   rG   r   e   r   z*resultatcsv.<locals>.<listcomp>.<listcomp>)join)r}   valuer   rF   rG   r   e   s   $ r~   )r   r   r   r   r   rI   rq   rr   r4   r{   nomcsvwriterwriterowrange)r]   	id_classe
id_matiereid_seminid_semaxrd   re   rf   rg   rs   rk   responser   r   rF   r   rG   resultatcsvS   s    

4r   c              	   C   s\   t jjdd}t| jpdt ddd}| r|  tdS t| d||ddd	d
ddS )uh   Renvoie la vue de la page où l'on déterminer l'éventuel message d'Accueil des colleurs et/ou élèvesr@   )
expediteurNinstanceinformation_secretzmixte/information.htmlColleursu   ÉlèveszTout le monde)   r@      F)rU   infosexpeisadmin)	r   rI   filterr	   rW   rX   saver   r   )r]   r   rU   rF   rF   rG   informationh   s   r   c                 C      t t|d}|  tdS )z%Supprime l'info dont l"id est id_infori   r   )r   r   deleter   )r]   id_infoinforF   rF   rG   informationSupprr      r   c                 C   sd   |dkrt t|d}ntddd}t| jpd|d}| r&|  tdS t| d	|d
|dkdS )z$Modifie l'info dont l"id est id_info0ri   r@   r   )r   destinataireNr   r   zmixte/informationmodif.htmlF)rU   r   modif)r   r   r	   rW   rX   r   r   r   )r]   r   r   rU   rF   rF   rG   informationModify   s   r   c                 C   sN  t | jpd }| jdkr>| r=|jd j| jd< |jd s dn|jd j| jd< |jd s0dn|jd j| jd< tdS n_z$tj	j
| jd d	}| jd sPdn| jd }| jd s\dn| jd }W n tyo   d }}Y n.w tj	j|d
}|r|j|d}|r|j|d}|ddddddd}t |||dd}t| d|||dS )NrW   colleurre   Fmatierenoterd   
classenotenotes_secretri   r   )re   rd   r   eleve__userr~   z-date_collez-heure)r   re   rd   rQ   zsecretariat/notes.html)rU   r   rl   )r   rW   rm   rX   rY   rj   rn   r   r   rI   ro   rp   r   r   select_relatedorder_byr   )r]   rU   r   re   rd   rl   rF   rF   rG   rl      s.   
  rl   c                 C   sp   t tj }z|d |d }}W n	 ty   tw |dkr.d| jv r.| jd du r.d}t| |||j|jS )zLRenvoie la vue de la page du colloscope de la classe dont l'id est id_classer   r   	transposeT1)	listr   rI   rb   rp   r3   rn   colloscope2rj   )r]   r   r   rk   rf   rg   rF   rF   rG   
colloscope   s    r   c           	      C   sF   t t|d}t t|d}t t|d}tj j}t| ||||t|S )zRenvoie la vue de la page du colloscope de la classe dont l'id est id_classe entre les semaines dont l'id est id_semin et id_semaxri   )	r   r   r   r   rI   rJ   modif_secret_colr"   int)	r]   r   r   r   r   rd   rf   rg   isprofrF   rF   rG   r      s
   r   c                 C   s0   t t|d}t t|d}t t|d}t|||S zwRenvoie le fichier PDF du colloscope de la classe dont l'id est id_classe, entre les semaines d'id id_semin et id_semaxri   )r   r   r   r6   r]   r   r   r   rd   rf   rg   rF   rF   rG   colloscopePdf   s   r   c                 C   s2   t t|d}t t|d}t t|d}t| |||S r   )r   r   r   r/   r   rF   rF   rG   colloscopeCsv   s   r   accueilc                 C   sH   t j js
tdS tt|d}tt|d}tt|d}t| ||||S )zRenvoie la vue de la page de modification du colloscope de la classe dont l'id est id_classe,
    dont les semaines sont entre la semaine d'id id_semin et celle d'id id_semax   Accès non autoriséri   )	r   rI   rJ   r   r5   r   r   r   r#   )r]   r   r   r   creneaumodifrd   rf   rg   rF   rF   rG   colloscopeModif   s   r   c                 C   s*   t t|d}tj jstdS t| |S )zVRenvoie la vue de la page d'import' du colloscope de la classe dont l'id est id_classeri   r   )r   r   r   rI   rJ   r   r5   r2   r]   r   rd   rF   rF   rG   colloscopeImport   s   
r   c                 C   s.   t j js
tdS tt|d}t| |||S )u   Essaie de supprimer le créneau dont l'id est id_creneau puis redirige vers la page de modification du colloscope
    dont les semaines sont entre la semaine d'id id_semin et celle d'id id_semaxr   ri   )r   rI   rJ   r   r5   r   r   r%   r]   
id_creneaur   r   creneaurF   rF   rG   creneauSuppr   s   r   c                 C   s6   t j js
tdS tt|d}t| |jj	|||dS )zMRenvoie la vue de la page de modification du creneau dont l'id est id_creneaur   ri   )r   )
r   rI   rJ   r   r5   r   r   r   rd   rj   r   rF   rF   rG   creneauModif   s   r   c                 C   s0   t j js
tdS tt|d}t| j|||S )zLRenvoie la vue de la page de duplication du creneau dont l'id est id_creneaur   ri   )	r   rI   rJ   r   r5   r   r   r$   rE   r   rF   rF   rG   creneauDupli   s   r   c                 C   s(   t j js
tdS tt|d}t|S )uy   Renvoie une chaîne de caractères récapitulant les incompatibilités du colloscope de la classe dont l'id est id_classer   ri   )r   rI   rJ   r   r5   r   r   r&   r   rF   rF   rG   
ajaxcompat   s   r   c                 C   s6   t j js
tdS tt|d}tt|d}t||S )u}   Renvoie la liste des colleurs de la classe dont l'id est id_classe et de la matière dont l'id est id_matiere, au format jsonr   ri   )	r   rI   rJ   r   r5   r   r   r   r)   )r]   r   r   rd   re   rF   rF   rG   ajaxmajcolleur   s
   
r   c                 C   s`   t j js
tdS tt|d}tt|d}tt|d}tt	|d}	tt
|d}
t||||	|
S )u   Ajoute la colle propre au quintuplet (matière,colleur,groupe,semaine,créneau) et renvoie le username du colleur
    en effaçant au préalable toute colle déjà existante sur ce couple créneau/semainer   ri   r|   )r   rI   rJ   r   r5   r   r   r   r   r   r   r'   )r]   r   
id_colleur	id_groupenumero_semainer   re   r   grouper~   r   rF   rF   rG   ajaxcolloscope  s   r   c                 C   sV   t j js
tdS tt|d}tt|d}tt|d}	tt	|d}
t
||||	|
|S )u   Ajoute la colle propre au quintuplet (matière,colleur,eleve,semaine,créneau) et renvoie le username du colleur
    en effaçant au préalable toute colle déjà existante sur ce couple créneau/semainer   ri   r   )r   rI   rJ   r   r5   r   r   r   r   r   r(   )r]   r   r   id_elever   r   r   re   r   r~   r   rF   rF   rG   ajaxcolloscopeeleve  s   r   c                 C   s6   t j js
tdS tt|d}tt|d}t||S )u   Efface la colle sur le créneau dont l'id est id_creneau et la semaine dont le numéro est numero_semaine
    puis renvoie la chaine de caractères "efface" r   r   ri   )	r   rI   rJ   r   r5   r   r   r   r*   )r]   r   r   r~   r   rF   rF   rG   ajaxcolloscopeeffacer  s
   
r   c
              
   C   sn   t j js
tdS |dkrtt|d}
tt|d}nd}
d}tt|d}tt	|d}t
|
||||||||		S )uE  Compte le nombre de colles présente sur les couples créneau/semaine sur le créneau dont l'id est id_creneau
    et les semaines dont le numéro est compris entre celui de la semaine d'id id_semaine et ce dernier + duree
    et dont le numéro est congru à celui de la semaine d'id id_semaine modulo frequence
    S'il n'y en a aucune, ajoute les colles sur les couples créneau/semaine précédents, avec le colleur dont l'id est id_colleur
    le groupe démarre au groupe dont l'id est id_groupe puis va de permutation en permutation, et la matière dont l'id est id_matièrer   z-1ri   r   r   r   )r   rI   rJ   r   r5   r   r   r   r   r   r+   r]   r   r   r   r   r   r   duree	frequencepermutationre   r   r~   r   rF   rF   rG   ajaxcolloscopemulti'  s   r   c
              
   C   s\   t j js
tdS tt|d}
tt|d}tt|d}tt	|d}t
|
||||||||		S )u  ajoute les colles sur les couples créneau/semaine sur le créneau dont l'id est id_creneau
    et les semaines dont le numéro est compris entre celui de la semaine d'id id_semaine et ce dernier + duree
    et dont le numéro est congru à celui de la semaine d'id id_semaine modulo frequence, avec le colleur dont l'id est id_colleur
    le groupe démarre au groupe dont l'id est id_groupe puis va de permutation en permutation, et la matière dont l'id est id_matièrer   ri   r   )r   rI   rJ   r   r5   r   r   r   r   r   r,   r   rF   rF   rG   ajaxcolloscopemulticonfirm:  s   r   c                 C   s^   t  \}}t||| jpd}| r|jd }|jd }tj||\}}t| d|||dS )u?   Renvoie la vue de la page de récapitulatif des heures de colleNmoisMinmoisMaxzsecretariat/recapitulatif.html)rU   decompte	effectifs)	r   r   rW   rX   rY   r   rI   r   r   )r]   r   r   rU   listeDecompter   rF   rF   rG   recapitulatifH  s   


r   c                 C   s  t tdddg }tjdddddd	d
}d}tdd}d||d< t	|}|
g d |D ]K}|
|jjj |jjj |jj |jj|jd u rSdnd|jjj |jjj |jj|jdd|jd |jd ||j |jjg
 q4|S )Nr   zn.nAbscolleur__userr   r~   rd   colleur__user__last_namecolleur__user__first_name
date_collez
compta.csvru   rv   attachment; filename={}rx   )
Nomu   prénom   Matièrerd   u	   étudiantr~   dateheurer   ztemps (min)u   élève fictifz{} {}%d/%m/%Yz	{}h{:02d}<   )r   r   r   rI   r   r   r4   r{   r   r   r   r   rE   	last_nameupper
first_nametitlere   r   rd   r   r~   r|   r   strftimer   r   temps)r]   LISTE_NOTESrl   
nomfichierr   r   r   rF   rF   rG   comptaS  s   

,,4r   c                 C   sH   t | jpd}| r|  tdS tj }t| d||t	|dS )z:Renvoie la vue de la page de ramassage des heures de colleN	ramassagezsecretariat/ramassage.html)rU   
ramassageshauteur)
r   rW   rX   r   r   r   rI   rb   r   len)r]   rU   r  rF   rF   rG   r   f  s   
r   c                 C   r   )znEssaie d'effacer le ramassage dont l'id est id_ramassage, puis redirige vers la page de gestion des ramassagesri   r   )r   r   r   r   )r]   id_ramassager   rF   rF   rG   ramassageSupprp  r   r  c                    s  t |}t |}tt|d}g d}tdd}tjj|jd r3|s3tjj|jdt	dd }n
t
jtdd	 }|j}tjj|d
d||d\}	}
d|j|j|j|j|j|j}d||d< t|}|g d|rsdgng  dd |
D   g d}|r|	D ]2\}}}}}}} || | || | | ||d d  g fddtt|
D   q|S |	D ]*\}}}}}} || | || | | g fddtt|
D   q|S )um   Renvoie le fichier CSV du ramassage par année/effectif correspondant au ramassage dont l'id est id_ramassageri    Janvieru   FévrierMarsAvrilMaiJuinJuilletu   Août	SeptembreOctobreNovembreu	   Décembreru   rv   moisFin__ltmoisFinmoisFin__maxlundi
lundi__minTFr   	parClasseparMoisfullzramassage{}-{}-{}_{}-{}-{}.csvr   rx   )r      ÉtablissementGrader      Prénomr   c                 S      g | ]
\}}d  ||qS )u   {}è. ann.  {}r{   r}   anneeeffectifrF   rF   rG   r         z ramassageCSV.<locals>.<listcomp>inconnuu	   certifiézbi-admissibleu   agrégéz
chaire sup   r   c                    &   g | ]}d   | d ddqS {:.2f}r   .,r{   replacer   heuresrF   rG   r        & c                    r'  r(  r,  r   r.  rF   rG   r     r0  )r   r   r   r4   rI   r   r  exists	aggregater>   r   r?   decompteRamassager{   yearmonthdayr   r   r   r   r   r   r  )r]   r  r  r  r   
LISTE_MOISr   debutfinr   r   r   r   LISTE_GRADESre   etablissementgradecolleur_nomcolleur_prenom_moirF   r.  rG   ramassageCSVw  s<   
  
* rA  c           +         s  t d t |}tt|d}g d}g d}tdd}tjj|jd r>|s>tjj|jdt	dd	 t
d
d }n
tjtdd }|j}	d|j |j d
 }
tjj|dd|d\} d|j|j|j|	j|	j|	j}d||d< td|d|	dddd}|jd d|j  d t   }d}tdd |D }|  tg d}g drdgng  dd  D  g fd dttd!|D  }d
 } } } }}|D ]\}}}| || d< |d
kr|d"d|fdt|| d
 d!f ||7 }|D ]\}}}| || d
< |d
kr/|d"d
|fd
t|| d
 d!f ||7 }|D ]\}}} ||| d< | d
krX|d"d|fdt||  d
 d!f || 7 }r|D ]x\}!}"}#|!|| d#< |#d
kr|d"d#|fd#t||# d
 d!f ||#7 }|"D ]M\}$}%|$|
k r|d$d%|fd%t  |fd& ||$d  || d%< tt D ]}&d'|%|& d( d)d*|| |&d+ < q|d
7 }|d,kr|d!krt|d| d#| |d#| |g|gt   td
| d,|g d-}'|'| |' |dd\}(})|'!||jd |( d |j"|) |d   |#  |  tg d}|d!8 }g d.d/d  D  g fd0dttd!|D  }|d!8 }|d!8 }|d!8 }|d!8 }d
}|d
kr| |d
 d< |dkr{|d"d1dt|d
 d!f |d
kr| |d
 d
< |dkr|d"d2d
t|d
 d!f |d
kr||d
 d< |dkr|d"d3dt|d
 d!f |d
kr|!|d
 d#< |dkr|d"d4d#t|d
 d!f qqaq5|D ]\}!}%|!|| d#< tt D ]}&d'|%|& d( d)d*|| |&d% < q|d
7 }|d,kr|d!krt|d| d#| |d#| g|gt   td
| d,|g d-}'|'| |' |dd\}(})|'!||jd |( d |j"|) |d   |#  |  tg d}|d!8 }g dd5d  D  g fd6dttd!|D  }|d!8 }|d!8 }|d!8 }d
}|d
kr| |d
 d< |dkr|d"d1dt|d
 d!f |d
kr| |d
 d
< |dkr|d"d2d
t|d
 d!f |d
kr||d
 d< |dkr|d"d3dt|d
 d!f qߐq5q
qt|d| d#| |d#| g|gt    td
| d,|g d-}'|'| |' |dd\}(})|'!||jd |( d |j"|) |d   |#  |$  |j%& }*|j%'  |(|* |S )7um   Renvoie le fichier PDF du ramassage par année/effectif correspondant au ramassage dont l'id est id_ramassager@   ri   r  )janfevmaravrmaijuinjuilaousepoctnovdeczapplication/pdfrv   r  r  r  r   daysr  r  r&  Fr  zramassage{}-{}-{}_{}-{}-{}.pdfr   rx   z Ramassage des colles du {} au {}r      )titremarge_xmarge_yr   	   c                 S   s   g | ]\}}}|qS rF   rF   )r}   xyzrF   rF   rG   r     r   z ramassagePdf.<locals>.<listcomp>))GRIDr   r   r   r   r   )r   r   r   )
BACKGROUNDrY  )r   r   )333333?r\  r\  )VALIGNrY  rZ  MIDDLE)ALIGNrY  rZ  CENTRE)FACErY  rZ  zHelvetica-Bold)SIZErY  rZ     )r   r  r  r   Moisc                 S   r  u   {}è. ann.
{}r  r   rF   rF   rG   r     r#  c                    s"   g | ]}d gd t    qS r     r  r   r   r  rF   rG   r     s   "    SPANr   	TEXTCOLORrg  )r   r   r   z{:.2f}hr   r*  r+        )	colWidths
rowHeights)r   r  r  r   rd  c                 S   r  re  r  r   rF   rF   rG   r     r#  c                       g | ]}d gdt    qS )r  rm  rh  r   r   rF   rG   r         )r   r   )r   r   )r@   r   )r   r   c                 S   r  re  r  r   rF   rF   rG   r   	  r#  c                    rq  rf  rh  r   rr  rF   rG   r   	  rs  ))r   r   r   r4   rI   r   r  r1  r2  r>   r=   r   r?   r4  r5  r3  r{   r6  r7   r   rR  r  sumdebutDePager<   r   minr   addr-  r;   setStylewrapOndrawOnrV  	finDePager   buffergetvalueclosewrite)+r]   r  r  r  r   r7  LISTE_MOIS_COURTr   r8  r9  	moisdebutr   r   pdf
largeurcel
hauteurcel
nbKolleurs
LIST_STYLEdataligneMat	ligneEtab
ligneGradeligneColleur	ligneMoisre   
listeEtabsnbEtabsr;  listeGradesnbGradesr<  listeColleurs
nbColleursr   	listeMoisnbMoisr@  	decomptesr   twhfichierrF   ri  rG   ramassagePdf  s  
* "$D
$
$
$
$
 *B
*4







2*@
*4





Db
*


r  c              
   C   sp  t t|d\}}t|}tt|d}tjj|jd r4|s4tjj|jdt	dd t
dd }n
tjtdd	 }g d
}tdd}	tjj|ddt||d}
t|
 g d}d|j|j|jj|jj}d||	d< t|	}g d}|rdg|dd< || |s|
D ]B}t|d }||d |d |d  ||d  |d  |d  g|r||d d d  gng  d|d dd g  q|	S t|
d!kr6|
d! d! |
d! d |
d! d }}}d"\}}|
D ]}|d! |d }}|d }||ks||krD|d#gd|   ||d$| gd#gd|   d|d dd g  |d#gd|   ||7 }d!}||kr{|d$|gd#gd|   d|d dd g  |d#gd|   |d#gd|   d!}t|d }||d |d |d  ||d  |d  |d  g|r||d% d d  gng  d|d dd g  ||7 }|d! |d |d }}}q|d#gd|   ||d$| gd#gd|   d|d dd g  |d#gd|   ||7 }|d$|gd#gd|   d|d dd g  |d#gd|   |d#gd|   |	S )&u   Renvoie le fichier CSV du ramassage par classe correspondant au ramassage dont l'id est id_ramassage
    si total vaut 1, les totaux par classe et matière sont calculésr@   ri   r  r  r  r   rN  r  r  r  ru   rv   Tr  r$  z$ramassageCSVParclasse{}_{}-{}_{}.csvr   rx   )r   r   r  r  r   r  r/  r   r   r   rg  rm        rT  r&  r)  r   r*  r+  r   rY  r  ztotal {})divmodr   r   r   rI   r   r  r1  r2  r>   r=   r   r?   r4   r3  boolprintr{   r5  r4  r   r   r   r   r   r-  r  )r]   r  totalParmoisr  parmoistotalr   	moisDebutr7  r   r  r:  r   r   enteter   r/  last_classelast_classe_nomlast_matieretotal_classetotal_matiererd   re   rF   rF   rG   ramassageCSVParClasse%  s   *


(>
8>8r  c                 C   s8   t |}tt |d\}}tt|d}t||||ddS )   Renvoie le fichier PDF du ramassage par classe correspondant au ramassage dont l'id est id_ramassage
    si total vaut 1, les totaux par classe et matière sont calculésr@   ri   Fr   )r   r  r   r   r-   )r]   r  r  r  r  r  r   rF   rF   rG   ramassagePdfParClassea  s   r  c                 C   s,   t |}t |d }tt|d}t|||S )r  r@   ri   )r   r   r   r.   )r]   r  r  r  r   rF   rF   rG   ramassagePdfParColleurj  s   r  c                 C   s@   t j js
tdS tt|d}tjj|d	d}t
| ||S )zURenvoie la vue de la page de gestion des groupes de la classe dont l'id est id_classer   ri   r   groupeeleve__user)r   rI   rJ   modif_secret_grouper5   r   r   r   r   prefetch_relatedr   )r]   r   rd   groupesrF   rF   rG   r   s  s
   r   c                 C   *   t j js
tdS tt|d}t| |S )uW   Renvoie la vue de la page de création d'un groupe de la classe dont l'id est id_classer   ri   )r   rI   rJ   r  r5   r   r   r0   r   rF   rF   rG   groupeCreer|     
r  c                 C   r  )zhEssaie de supprimer la groupe dont l'id est id_groupe, puis redirige vers la page de gestion des groupesr   ri   )r   rI   rJ   r  r5   r   r   r   r]   r   r   rF   rF   rG   groupeSuppr  r  r  c                 C   r  )zKRenvoie la vue de la page de modification du groupe dont l'id est id_grouper   ri   )r   rI   rJ   r  r5   r   r   r!   r  rF   rF   rG   groupeModif  r  r  c                 C   r  u   change pour la classe dont l'id est id_classe la propriété de groupes différents ou égaux chaque semestres et renvoie la page des groupesr   ri   )r   rI   rJ   r  r5   r   r   r    r   rF   rF   rG   
groupeSwap  r  r  c                 C   r  r  )r   rI   rJ   r  r5   r   r   r1   r   rF   rF   rG   	groupecsv  r  r  c                 C   s   t t|d}tjj|dddd}t|d}t| jpd|d}t	jj||dd	d
|j
d _| r@|  td|jS t| d|||dS )uD   Renvoie la vue de la page de gestion des matières ects de la classeri   r   profsr   	precisionNr   ra   colleurprof__classeuser__last_nameuser__first_namesecret_ects_matiereszmixte/ectsmatieres.html)rd   matieresECTSrU   )r   r   r   rI   r   r  r   r   rW   r   rZ   querysetrX   r   r   rj   r   )r]   r   rd   r  
newMatiererU   rF   rF   rG   ectsmatieres  s   
 r  c                 C   sv   t t|d}t| jpd|d}tjj|j|jddd|j	d _
| r0|  td|jjS t| d	||j|d
S )uI   Renvoie la vue de la page de modification des matières ects de la classeri   Nr   r  r  r  r  r  zmixte/ectsmatieremodif.html)re   rd   rU   )r   r   r   rW   r   rI   r   rd   r   rZ   r  rX   r   r   rj   r   )r]   r   re   rU   rF   rF   rG   ectsmatieremodif  s   $r  c                 C   sF   t t|d}z|  W n ty   t| d Y nw td|jjS )uZ   Supprime la matière ects dont l'id est id_matiere puis renvoie la page des matières ECTSri   u6   Impossible de l'effacer (des élèves y ont des notes)r  )	r   r   r   rp   messagesrV   r   rd   rj   )r]   r   re   rF   rF   rG   ectsmatieresuppr  s   r  c           	      C   s   t t|d}tjj|ddd}td}tj||\}}g }|D ]}|	t
|jdut
|jdu  q"t| dtjj|d|||jdk||||d	S )
z:Renvoie la vue de la page des notes ECTS ects de la classeri   r   r   r  ABCDEFNzsecretariat/ectsnotes.htmlr@   )elevesnomatrd   annee2matieres
listeNotes	listNotesnbsemestres)r   r   r   rI   r   r   r   r   r   appendr   	semestre1	semestre2r   r   r!  )	r]   r   rd   r  r  r  r  r  re   rF   rF   rG   	ectsnotes  s   $.r  c              
   C   sn   t t|d}tjj|ddd}|st|| jpd }tj	|\}}t
| dt| j|||||  dS )Nri   r   r  r  zmixte/ectscredits.html)r   rd   creditsrU   r  nbeleves)r   r   r   rI   r   r   r
   rW   r   r  r   rO   rE   count)r]   r   rU   rd   r  r  r  rF   rF   rG   ectscredits  s   (r  c                 C   N   t t|d}t|j| j}| jdkr%| rt|||jS t| |jj	|S t
Nri   rW   )r   r   r
   rd   rW   rm   rX   r8   r  rj   r3   r]   r   r   rU   rF   rF   rG   ficheectspdf     
r  c                 C   r  r  )r   r   r
   rd   rW   rm   rX   r9   r  rj   r3   r  rF   rF   rG   attestationectspdf  r  r  c                 C   H   t t|d}t|| j}| jdkr"| rt|d |S t| |j|S t	r  )
r   r   r
   rW   rm   rX   r8   r  rj   r3   r]   r   rd   rU   rF   rF   rG   ficheectsclassepdf     
r  c                 C   r  r  )
r   r   r
   rW   rm   rX   r9   r  rj   r3   r  rF   rF   rG   attestationectsclassepdf   r  r  c                 C   sF   t t|d}t|| j}| jdkr!| rt||S t| |j|S t	r  )
r   r   r
   rW   rm   rX   r:   r  rj   r3   r  rF   rF   rG   publipostageects  s   

r  )NrY  )r   )django.shortcutsr   r   r   django.contrib.authr   r   django.contrib.auth.decoratorsr   administrateur.formsr   r	   colleur.formsr
   r   secretariat.formsr   r   r   r   accueil.modelsr   r   r   r   r   r   r   r   r   r   r   r   r   r   mixte.mixter   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   django.httpr3   r4   r5   pdf.pdfr6   r7   r8   r9   r:   reportlab.platypusr;   r<   datetimer=   django.db.modelsr>   r?   r   rN   rH   rL   rO   r^   rc   rt   r   r   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rA  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rF   rF   rF   rG   <module>   s   @\








	



























	





	










	


 

;




















	










