PDF_periodes

This commit is contained in:
alazo 2017-08-13 22:58:46 +02:00
parent 7b04443965
commit d9d4fd7879
31 changed files with 1175 additions and 999 deletions

View file

@ -1,13 +1,12 @@
from django.contrib import admin
from .models import (Enseignant, Domaine, Competence, SousCompetence, Objectif,
Ressource, Module, Processus, Document, UploadDoc)
Ressource, Module, Processus, Document, UploadDoc)
from .forms import (ProcessusAdminForm, ProcessusInlineAdminForm, ModuleAdminForm, DomaineAdminForm, CompetenceAdminForm,
SousCompetenceInlineAdminForm, CompetenceInlineAdminForm, ObjectifAdminForm, RessourceAdminForm,
SousCompetenceAdminForm, DocumentAdminForm, UploadAdminForm )
# Register your models here.
from .forms import (ProcessusAdminForm, ProcessusInlineAdminForm, ModuleAdminForm,
DomaineAdminForm, CompetenceAdminForm, SousCompetenceInlineAdminForm,
CompetenceInlineAdminForm, ObjectifAdminForm, RessourceAdminForm,
SousCompetenceAdminForm, DocumentAdminForm, UploadAdminForm)
class SousCompetenceInline(admin.TabularInline):
@ -19,8 +18,8 @@ class SousCompetenceInline(admin.TabularInline):
class CompetenceInline(admin.TabularInline):
form = CompetenceInlineAdminForm
model = Competence
extra=0
#template ='templates/admin/cms/processus/edit_inline/tabular.html'
extra = 0
class SousCompetenceAdmin(admin.ModelAdmin):
form = SousCompetenceAdminForm
@ -33,10 +32,10 @@ class RessourceAdmin(admin.ModelAdmin):
class ModuleAdmin(admin.ModelAdmin):
form = ModuleAdminForm
inlines = [CompetenceInline,]
inlines = [CompetenceInline]
extra = 0
fields = (('code', 'nom'),
('situation'),
'situation',
('contenu', 'contenu_published'),
('didactique', 'didactique_published'),
('evaluation', 'evaluation_published'),
@ -45,7 +44,7 @@ class ModuleAdmin(admin.ModelAdmin):
('sem1', 'sem2'),
('sem3', 'sem4'),
('sem5', 'sem6'),
('processus'),
'processus',
)
@ -60,7 +59,7 @@ class ObjectifAdmin(admin.ModelAdmin):
class ProcessusInlineAdmin(admin.TabularInline):
form = ProcessusInlineAdminForm
model = Processus
extra=0
extra = 0
class CompetenceAdmin(admin.ModelAdmin):
@ -73,7 +72,7 @@ class CompetenceAdmin(admin.ModelAdmin):
class DomaineAdmin(admin.ModelAdmin):
list_display = ('nom', 'responsable',)
form = DomaineAdminForm
inlines = [ProcessusInlineAdmin,]
inlines = [ProcessusInlineAdmin]
class DocumentAdmin(admin.ModelAdmin):

View file

@ -1,168 +1,163 @@
# -*- encoding: utf-8 -*-
'''
"""
Created on 17 nov. 2012
@author: alzo
'''
from .models import (Processus, Module, Domaine, Competence, SousCompetence, Document,
UploadDoc)
"""
from django import forms
#from django.forms import Textarea, TextInput
from .models import (Processus, Module, Domaine, Competence, SousCompetence, Document, UploadDoc)
from tinymce.widgets import TinyMCE
class DocumentAdminForm(forms.ModelForm):
class Meta:
model = Document
fields = ('titre', 'texte','published')
fields = ('titre', 'texte', 'published')
widgets = {
'texte': TinyMCE(attrs={'cols': 120, 'rows': 30}),
}
}
class ProcessusAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ProcessusAdminForm, self).__init__(*args, **kwargs)
#self.fields['nom'].widget.attrs['size']='50'
class Meta:
model = Processus
fields = ('code', 'nom', 'domaine', 'description')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
'description': forms.Textarea(attrs={'cols': 125, 'rows':8}),
}
class DomaineAdminForm(forms.ModelForm):
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
'description': forms.Textarea(attrs={'cols': 125, 'rows': 8}),
}
def __init__(self, *args, **kwargs):
super(DomaineAdminForm, self).__init__(*args, **kwargs)
super(ProcessusAdminForm, self).__init__(*args, **kwargs)
class DomaineAdminForm(forms.ModelForm):
class Meta:
model = Domaine
fields = ('code', 'nom', 'responsable')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(DomaineAdminForm, self).__init__(*args, **kwargs)
class CompetenceAdminForm(forms.ModelForm):
class Meta:
model = Competence
fields = '__all__'
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(CompetenceAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = Competence
fields = ('__all__')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
class SousCompetenceAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(SousCompetenceAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
class CompetenceInlineAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows': 1}),
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(CompetenceInlineAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows':1}),
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
class SousCompetenceInlineAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows': 1}),
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 1}),
}
def __init__(self, *args, **kwargs):
super(SousCompetenceInlineAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows':1}),
'nom': forms.Textarea(attrs={'cols': 125, 'rows':1}),
}
class ProcessusInlineAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows': 1}),
'nom': forms.Textarea(attrs={'cols': 75, 'rows': 4}),
'description': forms.Textarea(attrs={'cols': 95, 'rows': 6}),
}
def __init__(self, *args, **kwargs):
super(ProcessusInlineAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'code': forms.Textarea(attrs={'cols': 5, 'rows':1}),
'nom': forms.Textarea(attrs={'cols': 75, 'rows':4}),
'description': forms.Textarea(attrs={'cols': 95, 'rows':6}),
}
class ObjectifAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(ObjectifAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
class RessourceAdminForm(forms.ModelForm):
class Meta:
model = SousCompetence
fields = '__all__'
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 3}),
}
def __init__(self, *args, **kwargs):
super(RessourceAdminForm, self).__init__(*args, **kwargs)
class Meta:
model = SousCompetence
fields = ('__all__')
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':3}),
}
class ModuleAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(ModuleAdminForm, self).__init__(*args, **kwargs)
#self.fields['nom'].widget.attrs['size']='50'
class Meta:
model = Module
fields = ('__all__')
fields = '__all__'
widgets = {
'nom': forms.Textarea(attrs={'cols': 125, 'rows':2}),
'description': forms.Textarea(attrs={'cols': 125, 'rows':4}),
'situation': forms.Textarea(attrs={'cols': 125, 'rows':6}),
'contenu': forms.Textarea(attrs={'cols': 125, 'rows':4}),
'didactique': forms.Textarea(attrs={'cols': 125, 'rows':2}),
'evaluation': forms.Textarea(attrs={'cols': 125, 'rows':2}),
}
'nom': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
'description': forms.Textarea(attrs={'cols': 125, 'rows': 4}),
'situation': forms.Textarea(attrs={'cols': 125, 'rows': 6}),
'contenu': forms.Textarea(attrs={'cols': 125, 'rows': 4}),
'didactique': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
'evaluation': forms.Textarea(attrs={'cols': 125, 'rows': 2}),
}
def __init__(self, *args, **kwargs):
super(ModuleAdminForm, self).__init__(*args, **kwargs)
class UploadAdminForm(forms.ModelForm):
@ -170,4 +165,3 @@ class UploadAdminForm(forms.ModelForm):
class Meta:
model = UploadDoc
fields = ('titre', 'docfile', 'published', )

View file

@ -21,6 +21,7 @@ class Migration(migrations.Migration):
('published', models.BooleanField(default=False)),
],
),
migrations.RemoveField(
model_name='document',
name='docfile',

View file

@ -1,50 +1,52 @@
# -*- encoding: utf-8 -*-
'''
"""
Created on 17 nov. 2012
@author: alzo
'''
"""
from django.db import models
from django.http.response import HttpResponse
from django.conf import settings
from tinymce import models as tinymce_models
from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus import Paragraph, Spacer, PageBreak, Table, TableStyle, Image
from reportlab.graphics.shapes import Line
from reportlab.platypus import Table, TableStyle, Image
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_LEFT, TA_CENTER
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle as PS
style_8_c = PS(name='CORPS', fontName='Helvetica', fontSize=6, alignment = TA_CENTER)
style_normal = PS(name='CORPS', fontName='Helvetica', fontSize=8, alignment = TA_LEFT)
style_bold = PS(name='CORPS', fontName='Helvetica-Bold', fontSize=10, alignment = TA_LEFT)
style_title = PS(name='CORPS', fontName='Helvetica', fontSize=12, alignment = TA_LEFT)
style_adress = PS(name='CORPS', fontName='Helvetica', fontSize=10, alignment = TA_LEFT, leftIndent=300)
# Create your models here.
CHOIX_TYPE_SAVOIR = (
('Savoir','savoir'),
('Savoir méthodologique','savoir méthodologique'),
('Savoir relationnel','savoir relationnel'),
style_8_c = PS(name='CORPS', fontName='Helvetica', fontSize=6, alignment=TA_CENTER)
style_normal = PS(name='CORPS', fontName='Helvetica', fontSize=8, alignment=TA_LEFT)
style_bold = PS(name='CORPS', fontName='Helvetica-Bold', fontSize=10, alignment=TA_LEFT)
style_title = PS(name='CORPS', fontName='Helvetica', fontSize=12, alignment=TA_LEFT)
style_adress = PS(name='CORPS', fontName='Helvetica', fontSize=10, alignment=TA_LEFT, leftIndent=300)
CHOIX_TYPE_SAVOIR = (
('Savoir', 'savoir'),
('Savoir méthodologique', 'savoir méthodologique'),
('Savoir relationnel', 'savoir relationnel'),
)
CHOIX_TYPE_MODULE = (
('Spécifique', 'spécifique'),
('Transversal', 'transversal'),
)
class Enseignant(models.Model):
class Meta:
ordering =('nom',)
sigle = models.CharField(max_length= 5, blank=True, default='')
sigle = models.CharField(max_length=5, blank=True, default='')
nom = models.CharField(max_length=20, blank=True, default='')
prenom = models.CharField(max_length=20, blank=True, default='')
email = models.EmailField(blank=True, default='')
class Meta:
ordering = ('nom',)
def __str__(self):
return '{0} {1}'.format(self.nom, self.prenom)
@ -56,15 +58,12 @@ class Enseignant(models.Model):
class Domaine(models.Model):
class Meta:
ordering = ('code',)
code = models.CharField(max_length=20, blank=True)
nom = models.CharField(max_length=200, blank=False)
responsable = models.ForeignKey(Enseignant, null=True, default=None)
#height_screen = 50
class Meta:
ordering = ('code', )
def __str__(self):
return '{0} - {1}'.format(self.code, self.nom)
@ -72,36 +71,17 @@ class Domaine(models.Model):
def url(self):
return "<a href='/domaine/{0}'>{1}</a>".format(self.id, self.__str__())
"""
def svg(self):
processus = self.processus_set.all()
svg = '<rect x="20" y="{0}" rx="5" ry="5" width="250" height="{1}" fill="{2}" stroke="black" stroke-width="1" />'
txt = '<text x="25" y="{0}" style="stroke:#000000;font-size:10;">{1}</text>'
height_frame = processus.count()* self.height_screen
color = settings.DOMAINE_COULEURS[self.code]
return svg.format(20, height_frame , color) + txt.format(50, self.__str__())
def json(self):
dic_js = {}
dic_js['{code'] = self.code
dic_js['nom'] = self.nom
dic_js['resp'] = self.responsable.nom
return '{'
"""
class Processus(models.Model):
class Meta:
ordering = ('code',)
verbose_name_plural = 'processus'
code = models.CharField(max_length=20, blank=True)
nom = models.CharField(max_length=200, blank=False)
domaine = models.ForeignKey(Domaine, null=False)
description = models.TextField(default='')
class Meta:
ordering = ('code',)
verbose_name_plural = 'processus'
def __str__(self):
return '{0} - {1}'.format(self.code, self.nom)
@ -110,21 +90,16 @@ class Processus(models.Model):
class Module(models.Model):
class Meta:
ordering = ('code',)
code = models.CharField(max_length=10, blank=False, default='Code')
nom = models.CharField(max_length=100, blank=False, default='Nom du module')
type = models.CharField(max_length=20, choices= CHOIX_TYPE_MODULE)
type = models.CharField(max_length=20, choices=CHOIX_TYPE_MODULE)
situation = models.TextField()
evaluation = models.TextField()
contenu = models.TextField()
periode_presentiel = models.IntegerField(verbose_name='Présentiel')
travail_perso = models.IntegerField(verbose_name = 'Travail personnel')
travail_perso = models.IntegerField(verbose_name='Travail personnel')
pratique_prof = models.IntegerField(default=0, verbose_name='Pratique prof.')
didactique = models.TextField()
evaluation = models.TextField()
sem1 = models.IntegerField(default=0)
sem2 = models.IntegerField(default=0)
@ -139,6 +114,9 @@ class Module(models.Model):
evaluation_published = models.BooleanField(default=False)
contenu_published = models.BooleanField(default=False)
class Meta:
ordering = ('code',)
def __str__(self):
return '{0} - {1}'.format(self.code, self.nom)
@ -150,58 +128,52 @@ class Module(models.Model):
class Competence(models.Model):
class Meta:
ordering = ('code',)
verbose_name = 'compétence'
code = models.CharField(max_length=20, blank=True)
nom = models.CharField(max_length=250, blank=False)
type = models.CharField(max_length=35, blank=True, default='')
module = models.ForeignKey(Module, null=True, default=None)
proces_eval = models.ForeignKey(Processus, null=True, default=True)
list_display = ('code', 'nom', 'type','proces_eval')
list_display = ('code', 'nom', 'type', 'proces_eval')
class Meta:
ordering = ('code',)
verbose_name = 'compétence'
def __str__(self):
return '{0} - {1}'.format(self.code, self.nom)
class SousCompetence(models.Model):
code = models.CharField(max_length=20, blank=True)
nom = models.CharField(max_length=250, blank=False)
competence = models.ForeignKey(Competence, null=False)
class Meta:
ordering = ('code',)
verbose_name = 'sous-compétence'
code = models.CharField(max_length=20, blank=True)
nom = models.CharField(max_length=250, blank=False)
competence = models.ForeignKey(Competence, null=False)
def __str__(self):
return '{0} - {1}'.format(self.code, self.nom)
class Ressource(models.Model):
nom = models.CharField(max_length=200, blank=False)
type = models.CharField(max_length=30, choices = CHOIX_TYPE_SAVOIR, default='Savoir')
module=models.ForeignKey(Module, null=True, default=None)
type = models.CharField(max_length=30, choices=CHOIX_TYPE_SAVOIR, default='Savoir')
module = models.ForeignKey(Module, null=True, default=None)
def __str__(self):
return '{0}'.format(self.nom)
class Objectif(models.Model):
nom = models.CharField(max_length=200, blank=False)
module=models.ForeignKey(Module, null=True, default=None)
module = models.ForeignKey(Module, null=True, default=None)
def __str__(self):
return '{0}'.format(self.nom)
class Document(models.Model):
#docfile = models.FileField(upload_to='media/')
titre = models.CharField(max_length=128, blank=True)
texte = tinymce_models.HTMLField(blank=True,)
published = models.BooleanField(default=False)
@ -211,22 +183,15 @@ class Document(models.Model):
class UploadDoc(models.Model):
class Meta:
verbose_name= 'UploadDoc'
docfile = models.FileField(upload_to='doc/')
titre = models.CharField(max_length=100, blank=False)
published = models.BooleanField(default=False)
class Meta:
verbose_name = 'UploadDoc'
def __str__(self):
return self.titre
"""
class OffreEmploi(models.Model):
source = models.CharField(max_lenght=200, blank=False)
descr = model.HTMLField(blank=False)
published = models.BooleanField(default=False)
"""
class PDFResponse(HttpResponse):
@ -238,20 +203,18 @@ class PDFResponse(HttpResponse):
self.story = []
image = Image(settings.MEDIA_ROOT + '/media/header.png', width=520, height=75)
image.hAlign = TA_LEFT
self.story.append(image)
#self.story.append(Spacer(0,1*cm))
data = [['Filières EDS', title]]
data = list(['Filières EDS', title])
if portrait:
t = Table(data, colWidths=[8*cm,8*cm])
t = Table(data, colWidths=[8*cm, 8*cm])
else:
t = Table(data, colWidths=[11*cm,11*cm])
t.setStyle(TableStyle([ ('ALIGN',(0,0),(0,0),'LEFT'),
('ALIGN',(1,0),(-1,-1),'RIGHT'),
('LINEABOVE', (0,0) ,(-1,-1), 0.5, colors.black),
('LINEBELOW', (0,-1),(-1,-1), 0.5, colors.black),
]))
t = Table(data, colWidths=[11*cm, 11*cm])
t.setStyle(TableStyle([
('ALIGN', (0, 0), (0, 0), 'LEFT'),
('ALIGN', (1, 0), (-1, -1), 'RIGHT'),
('LINEABOVE', (0, 0), (-1, -1), 0.5, colors.black),
('LINEBELOW', (0, -1), (-1, -1), 0.5, colors.black),
]))
t.hAlign = TA_LEFT
self.story.append(t)
@ -270,7 +233,7 @@ class MyDocTemplate(SimpleDocTemplate):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber()))
self.canv.drawCentredString(self.CENTRE_WIDTH, 1*cm, "Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()
@ -288,8 +251,5 @@ class MyDocTemplateLandscape(SimpleDocTemplate):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber()))
self.canv.drawCentredString(self.CENTRE_WIDTH, 1*cm, "Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()

129
cms/pdf.py Normal file
View file

@ -0,0 +1,129 @@
from django.http.response import HttpResponse
from django.conf import settings
from reportlab.pdfgen import canvas
from reportlab.platypus import SimpleDocTemplate, Frame
from reportlab.platypus import Table, TableStyle, Image
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_LEFT, TA_CENTER
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle as PS
style_8_c = PS(name='CORPS', fontName='Helvetica', fontSize=6, alignment=TA_CENTER)
style_normal = PS(name='CORPS', fontName='Helvetica', fontSize=8, alignment=TA_LEFT)
style_bold = PS(name='CORPS', fontName='Helvetica-Bold', fontSize=10, alignment=TA_LEFT)
style_title = PS(name='CORPS', fontName='Helvetica', fontSize=12, alignment=TA_LEFT)
style_adress = PS(name='CORPS', fontName='Helvetica', fontSize=10, alignment=TA_LEFT, leftIndent=300)
class PDFResponse(HttpResponse):
def __init__(self, filename, title='', portrait=True):
HttpResponse.__init__(self, content_type='application/pdf')
self['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
self['Content-Type'] = 'charset=utf-8'
self.story = []
image = Image(settings.MEDIA_ROOT + '/media/header.png', width=400, height=80)
image.hAlign = TA_LEFT
self.story.append(image)
data = [['Filières EDS', title]]
if portrait:
t = Table(data, colWidths=[8*cm, 8*cm])
else:
t = Table(data, colWidths=[11*cm, 11*cm])
t.setStyle(TableStyle([
('ALIGN', (0, 0), (0, 0), 'LEFT'),
('ALIGN', (1, 0), (-1, -1), 'RIGHT'),
('LINEABOVE', (0, 0), (-1, -1), 0.5, colors.black),
('LINEBELOW', (0, -1), (-1, -1), 0.5, colors.black),
]))
t.hAlign = TA_LEFT
self.story.append(t)
class MyDocTemplate(SimpleDocTemplate):
def __init__(self, name):
SimpleDocTemplate.__init__(self, name, pagesize=A4, topMargin=0.5*cm, leftMargin=1*cm)
self.fileName = name
self.PAGE_WIDTH = A4[0]
self.PAGE_HEIGHT = A4[1]
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
def beforePage(self):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH, 1*cm, "Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()
class MyDocTemplateLandscape(SimpleDocTemplate):
def __init__(self, name):
SimpleDocTemplate.__init__(self, name, pagesize=landscape(A4), topMargin=0*cm, leftMargin=2*cm)
self.fileName = name
self.PAGE_WIDTH = A4[1]
self.PAGE_HEIGHT = A4[0]
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
def beforePage(self):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH, 1*cm, "Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()
class PeriodPDF(object):
"""Imprime les heures de cours par semestre"""
def __init__(self, filename):
self.canv = canvas.Canvas(filename, pagesize=A4)
self.canv.setPageCompression(0)
self.canv.setFont('Helvetica', 9)
header_frame = Frame(1.2*cm, 24*cm, 18*cm, 5*cm, showBoundary=0)
story = []
image = Image(settings.MEDIA_ROOT + 'logo.png', width=520, height=90)
story.append(image)
data = [['Filières EDS', 'Périodes de formation']]
t = Table(data, colWidths=[8.5*cm, 8.5*cm], spaceBefore=0, spaceAfter=0, hAlign=TA_LEFT)
t.setStyle(TableStyle([
('ALIGN', (0, 0), (0, 0), 'LEFT'),
('ALIGN', (1, 0), (-1, -1), 'RIGHT'),
('LINEABOVE', (0, 0), (-1, -1), 0.5, colors.black),
('LINEBELOW', (0, -1), (-1, -1), 0.5, colors.black),
]))
story.append(t)
header_frame.addFromList(story, self.canv)
def produce_half_year(self, half_year_id, modules, total):
initial_pos_x = [2, 11]
initial_pos_y = [17, 17, 10, 10, 3, 3]
width = 7*cm
height = 6.5*cm
x = initial_pos_x[(half_year_id-1) % 2]*cm
y = initial_pos_y[half_year_id-1]*cm
my_frame = Frame(x, y, width, height, showBoundary=0)
data = [['Semestre {0}'.format(half_year_id), '{0} h.'.format(total)]]
for line in modules:
value = getattr(line, 'sem{0}'.format(half_year_id))
data.append([line.nom, '{0} h.'.format(value)])
t = Table(data, colWidths=[7*cm, 1*cm], spaceBefore=0, spaceAfter=0, hAlign=TA_LEFT)
t.setStyle(TableStyle([('ALIGN', (0, 0), (0, 0), 'LEFT'),
('ALIGN', (1, 0), (-1, -1), 'RIGHT'),
('LINEBELOW', (0, 0), (1, 0), 1, colors.black),
('FONT', (0, 0), (-1, 0), 'Helvetica-Bold'), ]))
story = [t]
my_frame.addFromList(story, self.canv)
def print_total(self, total):
self.canv.drawString(2*cm, 2*cm, 'Total de la formation: {0} heures'.format(total))

View file

@ -1,24 +1,24 @@
'''
"""
Created on 4 déc. 2012
@author: alzo
'''
"""
from django.views.generic import ListView, TemplateView, DetailView
from .models import (Domaine, Processus, Module, Competence, Document, UploadDoc,
PDFResponse, MyDocTemplate, MyDocTemplateLandscape)
from .models import style_normal, style_bold, style_title
from django.db.models import F, Sum
from django.http import HttpResponse
from reportlab.platypus import Paragraph, Spacer, PageBreak, Table, TableStyle, Preformatted
from reportlab.platypus import Paragraph, Spacer, Table, TableStyle, Preformatted
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_LEFT
from reportlab.lib import colors
from reportlab.lib.colors import HexColor
from cms.pdf import PeriodPDF
from .models import style_normal, style_title
from .models import (Domaine, Processus, Module, Competence, Document, UploadDoc,
PDFResponse, MyDocTemplate, MyDocTemplateLandscape)
# Create your views here.
class HomeView(TemplateView):
template_name = 'cms/index.html'
@ -26,116 +26,113 @@ class HomeView(TemplateView):
context = super(HomeView, self).get_context_data(**kwargs)
for d in Domaine.objects.all().order_by('code'):
context[d.code] = d
for c in Processus.objects.all().order_by('code'):
context[c.code] = c
for m in Module.objects.all().order_by('code'):
context[m.code] = m
return context
class Element(object):
def __init__(self, el, top_left, bottom_right):
def __init__(self, el):
self.txt = el.__str__()
class HomePDFView(TemplateView):
template_name = 'cms/index.html'
def formating(self, el1=None, length=40 ):
el1 = '' if el1 is None else el1.__str__()
def formating(self, el1='', length=40):
el1 = '' if el1 == '' else el1.__str__()
return Preformatted(el1, style_normal, maxLineLength=length)
def pf40(self, txt):
return Preformatted(txt, style_normal, maxLineLength=40)
# def pf40(self, txt):
# return Preformatted(txt, style_normal, maxLineLength=40)
def render_to_response(self, context, **response_kwargs):
response = PDFResponse('PlanFormation.pdf' ,'Plan de formation', portrait=False)
response = PDFResponse('PlanFormation.pdf', 'Plan de formation', portrait=False)
d = Domaine.objects.all().order_by('code')
p = Processus.objects.all().order_by('code')
data = [['Domaines','Processus', 'Sem1', 'Sem2', 'Sem3','Sem4','Sem5','Sem6'],
[self.formating(d[0]), self.formating(p[0], 60) , 'M01' , '' ,'' , '' , '' ,'' ],
[self.formating(None), self.formating(None, 60) , 'M02' , '' ,'' , '' , '' ,'' ],
[self.formating(None), self.formating(p[1], 60) , '' , '' ,'' , 'M03' , '' , '' ],
[self.formating(None), self.formating(None, 60) , '' , 'M04' ,'' , '' , '' , '' ],
[self.formating(d[1]), self.formating(p[2], 60) , 'M05' , '' ,'M06' , '' , '' , '' ],
[self.formating(None), self.formating(p[3], 60) , '' , '' ,'' , '' , 'M07' , 'M09' ],
[self.formating(None), self.formating(None, 60) , '' , '' ,'' ,'' , 'M08' , '' ],
[self.formating(d[2]), self.formating(p[4], 60), '' , '' , 'M10' , '' , 'M12' ],
[self.formating(None), self.formating(p[5], 60) , '' , '' , 'M11' '' , '' ],
[self.formating(d[3]), self.formating(p[6], 60) , '' , '' , 'M13' , '' ,'' , 'M14' ],
[self.formating(d[4]), self.formating(p[7], 60) , 'M15' , '' ,'' , '' , '' , '' ],
[self.formating(d[5]), self.formating(p[8], 60) , 'M16_1' , '' ,'M16_2' , '' , 'M16_3' , '' ],
[self.formating(d[6]), self.formating(p[9], 60) , 'M17_1' , '' ,'M17_2' , '' , 'M17_3' , '' ],
[self.formating(d[7]), self.formating(p[10],60), 'Macc' , '' ,'' , '' , '' , '' ],
]
data = [
['Domaines', 'Processus', 'Sem1', 'Sem2', 'Sem3', 'Sem4', 'Sem5', 'Sem6'],
[self.formating(d[0]), self.formating(p[0], 60), 'M01', '', '', '', '', ''],
[self.formating(''), self.formating('', 60), 'M02', '', '', '', '', ''],
[self.formating(''), self.formating(p[1], 60), '', '', '', 'M03', '', ''],
[self.formating(''), self.formating('', 60), '', 'M04', '', '', '', ''],
[self.formating(d[1]), self.formating(p[2], 60), 'M05', '', 'M06', '', '', ''],
[self.formating(''), self.formating(p[3], 60), '', '', '', '', 'M07', 'M09'],
[self.formating(''), self.formating('', 60), '', '', '', '', 'M08', ''],
[self.formating(d[2]), self.formating(p[4], 60), '', '', 'M10', '', 'M12'],
[self.formating(''), self.formating(p[5], 60), '', '', 'M11', '', ''],
[self.formating(d[3]), self.formating(p[6], 60), '', '', 'M13', '', '', 'M14'],
[self.formating(d[4]), self.formating(p[7], 60), 'M15', '', '', '', '', ''],
[self.formating(d[5]), self.formating(p[8], 60), 'M16_1', '', 'M16_2', '', 'M16_3', ''],
[self.formating(d[6]), self.formating(p[9], 60), 'M17_1', '', 'M17_2', '', 'M17_3', ''],
[self.formating(d[7]), self.formating(p[10], 60), 'Macc', '', '', '', '', ''],
]
print(data)
t = Table(data, colWidths=[5.5*cm, 8*cm, 1.5*cm, 1.5*cm,1.5*cm, 1.5*cm,1.5*cm,1.5*cm], spaceBefore=0.5*cm, spaceAfter=1*cm)
t = Table(data, colWidths=[5.5*cm, 8*cm, 1.5*cm, 1.5*cm, 1.5*cm, 1.5*cm, 1.5*cm, 1.5*cm],
spaceBefore=0.5*cm, spaceAfter=1*cm)
t.setStyle(TableStyle([
('SIZE', (0,0), (-1,-1), 8),
('FONT', (0,0), (-1,0), 'Helvetica-Bold'),
('VALIGN',(0,0),(-1,-1),'MIDDLE'),
('ALIGN',(2,0),(-1,-1),'CENTER'),
('GRID',(0,0),(-1,-1), 0.25, colors.black),
#Domaine 1
('SPAN',(0,1), (0,4)),
('SPAN',(1,1), (1,2)),
('SPAN',(1,3), (1,4)),
('BACKGROUND',(0,1), (1,4), colors.orange),
('BACKGROUND',(2,1), (2,2), colors.orange),
('BACKGROUND',(5,3), (5,3), colors.orange),
('BACKGROUND',(3,4), (3,4), colors.orange),
#Domaine 2
('SPAN',(0,5), (0,7)),
('BACKGROUND',(0,5), (1,7), colors.red),
('BACKGROUND',(2,5), (2,5), colors.red),
('BACKGROUND',(4,5), (4,5), colors.red),
('BACKGROUND',(6,6), (6,6), colors.red),
('BACKGROUND',(7,6), (7,6), colors.red),
('BACKGROUND',(6,7), (6,7), colors.red),
#Domaine 3
('SPAN',(0,8), (0,9)),
('SPAN',(1,6), (1,7)),
('SPAN',(4,8), (5,8)),
('SPAN',(4,9), (5,9)),
('BACKGROUND',(0,8), (1,9), colors.pink),
('BACKGROUND',(4,8), (6,8), colors.pink),
('BACKGROUND',(4,9), (5,9), colors.pink),
#Domaine 4
('BACKGROUND',(0,10), (1,10), HexColor('#AD7FA8')),
('BACKGROUND',(4,10), (4,10), HexColor('#AD7FA8')),
('BACKGROUND',(7,10), (7,10), HexColor('#AD7FA8')),
#Domaine 5
('SPAN',(2,11), (-1,11)),
('BACKGROUND',(0,11), (-1,11), HexColor('#729FCF')),
#Domaine 6
('SPAN',(2,12), (3,12)),
('SPAN',(4,12), (5,12)),
('SPAN',(6,12), (7,12)),
('BACKGROUND',(0,12), (-1,12), colors.lightgreen),
#Domaine 7
('SPAN',(2,13), (3,13)),
('SPAN',(4,13), (5,13)),
('SPAN',(6,13), (7,13)),
('BACKGROUND',(0,13), (-1,13), colors.white),
#Domaine 8
('SPAN',(2,14), (-1,14)),
('BACKGROUND',(0,14), (-1,14), colors.lightgrey),
('SIZE', (0, 0), (-1, -1), 8),
('FONT', (0, 0), (-1, 0), 'Helvetica-Bold'),
('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
('ALIGN', (2, 0), (-1, -1), 'CENTER'),
('GRID', (0, 0), (-1, -1), 0.25, colors.black),
# Domaine 1
('SPAN', (0, 1), (0, 4)),
('SPAN', (1, 1), (1, 2)),
('SPAN', (1, 3), (1, 4)),
('BACKGROUND', (0, 1), (1, 4), colors.orange),
('BACKGROUND', (2, 1), (2, 2), colors.orange),
('BACKGROUND', (5, 3), (5, 3), colors.orange),
('BACKGROUND', (3, 4), (3, 4), colors.orange),
# Domaine 2
('SPAN', (0, 5), (0, 7)),
('BACKGROUND', (0, 5), (1, 7), colors.red),
('BACKGROUND', (2, 5), (2, 5), colors.red),
('BACKGROUND', (4, 5), (4, 5), colors.red),
('BACKGROUND', (6, 6), (6, 6), colors.red),
('BACKGROUND', (7, 6), (7, 6), colors.red),
('BACKGROUND', (6, 7), (6, 7), colors.red),
# Domaine 3
('SPAN', (0, 8), (0, 9)),
('SPAN', (1, 6), (1, 7)),
('SPAN', (4, 8), (5, 8)),
('SPAN', (4, 9), (5, 9)),
('BACKGROUND', (0, 8), (1, 9), colors.pink),
('BACKGROUND', (4, 8), (6, 8), colors.pink),
('BACKGROUND', (4, 9), (5, 9), colors.pink),
# Domaine 4
('BACKGROUND', (0, 10), (1, 10), HexColor('#AD7FA8')),
('BACKGROUND', (4, 10), (4, 10), HexColor('#AD7FA8')),
('BACKGROUND', (7, 10), (7, 10), HexColor('#AD7FA8')),
# Domaine 5
('SPAN', (2, 11), (-1, 11)),
('BACKGROUND', (0, 11), (-1, 11), HexColor('#729FCF')),
# Domaine 6
('SPAN', (2, 12), (3, 12)),
('SPAN', (4, 12), (5, 12)),
('SPAN', (6, 12), (7, 12)),
('BACKGROUND', (0, 12), (-1, 12), colors.lightgreen),
# Domaine 7
('SPAN', (2, 13), (3, 13)),
('SPAN', (4, 13), (5, 13)),
('SPAN', (6, 13), (7, 13)),
('BACKGROUND', (0, 13), (-1, 13), colors.white),
# Domaine 8
('SPAN', (2, 14), (-1, 14)),
('BACKGROUND', (0, 14), (-1, 14), colors.lightgrey),
]))
t.hAlign = 0
response.story.append(t)
doc = MyDocTemplateLandscape(response)
doc.build(response.story)
return response
@ -169,11 +166,11 @@ class ModuleListView(ListView):
model = Module
def Preformatted_left(text):
def preformatted_left(text):
return Preformatted(text, style_normal, maxLineLength=15)
def Preformatted_right(text):
def preformatted_right(text):
return Preformatted(text, style_normal, maxLineLength=110)
@ -181,6 +178,7 @@ class EvaluationView(ListView):
template_name = 'cms/evaluation.html'
model = Processus
class DocumentListView(ListView):
template_name = 'cms/document_list.html'
model = Document
@ -189,7 +187,6 @@ class DocumentListView(ListView):
query = Document.objects.filter(published=True)
return query
def get_context_data(self, **kwargs):
context = super(DocumentListView, self).get_context_data(**kwargs)
context['upload'] = UploadDoc.objects.filter(published=True)
@ -197,7 +194,7 @@ class DocumentListView(ListView):
class DocumentDetailView(DetailView):
template_name ='cms/document_detail.html'
template_name = 'cms/document_detail.html'
model = Document
@ -221,7 +218,7 @@ class ModulePDF(DetailView):
def render_to_response(self, context, **response_kwargs):
m = self.get_object()
response = PDFResponse('Module_{0}.pdf'.format(m.code) ,'Module de formation')
response = PDFResponse('Module_{0}.pdf'.format(m.code), 'Module de formation')
str_comp = ''
for c in m.competence_set.all():
@ -251,32 +248,34 @@ class ModulePDF(DetailView):
for l in lines:
str_con += '{0}\n'.format(l)
response.story.append(Spacer(0,1*cm))
response.story.append(Spacer(0, 1*cm))
response.story.append(Paragraph(m.__str__(), style_title))
data = [[Preformatted_left('Domaine'), Preformatted_right(m.processus.domaine.__str__())],
[Preformatted_left('Processus'), Preformatted_right(m.processus.__str__())],
[Preformatted_left('Situation emblématique'), Preformatted_right(m.situation)],
[Preformatted_left('Compétences visées'), Preformatted_right(str_comp)],
[Preformatted_left('Plus-value sur le CFC ASE'), Preformatted_right(str_scom)],
#[Preformatted_left('Ressources à acquérir'), Preformatted_right(str_res)],
[Preformatted_left('Objectifs à atteindre'), Preformatted_right(str_obj)],
[Preformatted_left('Didactique'), Preformatted_right(m.didactique)],
#[Preformatted_left('Contenu'), Preformatted_right(str_con)],
[Preformatted_left('Evaluation'), Preformatted_right(m.evaluation)],
[Preformatted_left('Type'), Preformatted_right('{0}, obligatoire'.format(m.type))],
[Preformatted_left('Semestre'), Preformatted_right('Sem. {0}'.format(m.semestre))],
[Preformatted_left('Présentiel'), Preformatted_right('{0} heures'.format(m.periode_presentiel))],
[Preformatted_left('Travail personnel'), Preformatted_right('{0} heures'.format(m.travail_perso))],
[Preformatted_left('Responsable'), Preformatted_right(m.processus.domaine.responsable.descr_pdf())],
]
t = Table(data, colWidths=[2.5*cm,10*cm])
t.setStyle(TableStyle([ ('ALIGN',(0,0),(-1,-1),'LEFT'),
('VALIGN',(0,0),(-1,-1),'TOP'),
('LEFTPADDING', (0,0),(-1,-1), 0),
]))
t.hAlign=0
response.story.append(Spacer(0,1*cm))
data = [
[preformatted_left('Domaine'), preformatted_right(m.processus.domaine.__str__())],
[preformatted_left('Processus'), preformatted_right(m.processus.__str__())],
[preformatted_left('Situation emblématique'), preformatted_right(m.situation)],
[preformatted_left('Compétences visées'), preformatted_right(str_comp)],
[preformatted_left('Plus-value sur le CFC ASE'), preformatted_right(str_scom)],
# [Preformatted_left('Ressources à acquérir'), Preformatted_right(str_res)],
[preformatted_left('Objectifs à atteindre'), preformatted_right(str_obj)],
[preformatted_left('Didactique'), preformatted_right(m.didactique)],
# [Preformatted_left('Contenu'), Preformatted_right(str_con)],
[preformatted_left('Evaluation'), preformatted_right(m.evaluation)],
[preformatted_left('Type'), preformatted_right('{0}, obligatoire'.format(m.type))],
[preformatted_left('Semestre'), preformatted_right('Sem. {0}'.format(m.semestre))],
[preformatted_left('Présentiel'), preformatted_right('{0} heures'.format(m.periode_presentiel))],
[preformatted_left('Travail personnel'), preformatted_right('{0} heures'.format(m.travail_perso))],
[preformatted_left('Responsable'), preformatted_right(m.processus.domaine.responsable.descr_pdf())],
]
t = Table(data, colWidths=[2.5*cm, 10*cm])
t.setStyle(TableStyle([
('ALIGN', (0, 0), (-1, -1), 'LEFT'),
('VALIGN', (0, 0), (-1, -1), 'TOP'),
('LEFTPADDING', (0, 0), (-1, -1), 0), ])
)
t.hAlign = 0
response.story.append(Spacer(0, 1*cm))
response.story.append(t)
doc = MyDocTemplate(response)
@ -288,23 +287,24 @@ def get_context(context):
"""
Calcul du nombre de périodes de formation
"""
liste = Module.objects.exclude(periode_presentiel = 0)
#context['tot'] = liste.aggregate(Sum(F('periode_presentiel')))
liste = Module.objects.exclude(periode_presentiel=0)
# context['tot'] = liste.aggregate(Sum(F('periode_presentiel')))
context['sem1'] = liste.exclude(sem1 = 0)
context['tot1'] = liste.aggregate(Sum(F('sem1')))
context['sem2'] = liste.exclude(sem2 = 0)
context['tot2'] = liste.aggregate(Sum(F('sem2')))
context['sem3'] = liste.exclude(sem3 = 0)
context['tot3'] = liste.aggregate(Sum(F('sem3')))
context['sem4'] = liste.exclude(sem4 = 0)
context['tot4'] = liste.aggregate(Sum(F('sem4')))
context['sem5'] = liste.exclude(sem5 = 0)
context['tot5'] = liste.aggregate(Sum(F('sem5')))
context['sem6'] = liste.exclude(sem6 = 0)
context['tot6'] = liste.aggregate(Sum(F('sem6')))
context['tot'] = context['tot1']['sem1__sum'] + context['tot2']['sem2__sum'] + context['tot3']['sem3__sum'] + \
context['tot4']['sem4__sum'] + context['tot5']['sem5__sum'] + context['tot6']['sem6__sum']
context['sem1'] = liste.exclude(sem1=0)
context['tot1'] = liste.aggregate(Sum(F('sem1')))['sem1__sum']
context['sem2'] = liste.exclude(sem2=0)
context['tot2'] = liste.aggregate(Sum(F('sem2')))['sem2__sum']
context['sem3'] = liste.exclude(sem3=0)
context['tot3'] = liste.aggregate(Sum(F('sem3')))['sem3__sum']
context['sem4'] = liste.exclude(sem4=0)
context['tot4'] = liste.aggregate(Sum(F('sem4')))['sem4__sum']
context['sem5'] = liste.exclude(sem5=0)
context['tot5'] = liste.aggregate(Sum(F('sem5')))['sem5__sum']
context['sem6'] = liste.exclude(sem6=0)
context['tot6'] = liste.aggregate(Sum(F('sem6')))['sem6__sum']
context['tot'] = context['tot1'] + context['tot2'] + context['tot3'] + \
context['tot4'] + context['tot5'] + context['tot6']
return context
@ -318,72 +318,24 @@ class PeriodeView(TemplateView):
class PeriodePDFView(TemplateView):
template_name = 'cms/periodes.html'
def render_to_response(self, context, **response_kwargs):
response = PDFResponse('Périodes.pdf' ,'Périodes de formation')
context = get_context(context)
filename = 'periode.pdf'
pdf = PeriodPDF(filename)
for semestre_id in range(1, 7):
modules = context['sem{0}'.format(str(semestre_id))]
total = context['tot{0}'.format(str(semestre_id))]
pdf.produce_half_year(semestre_id, modules, total)
pdf.print_total(context['tot'])
pdf.canv.save()
data = [['Semestre 1', '{0} h.'.format(context['tot1']['sem1__sum']),'', 'Semestre 2', '{0} h.'.format(context['tot2']['sem2__sum'])],
[context['sem1'][0], '{0} h.'.format(context['sem1'][0].sem1),'', context['sem2'][0], '{0} h.'.format(context['sem2'][0].sem2) ],
[context['sem1'][1], '{0} h.'.format(context['sem1'][1].sem1),'', context['sem2'][1], '{0} h.'.format(context['sem2'][1].sem2) ],
[context['sem1'][2], '{0} h.'.format(context['sem1'][2].sem1),'', context['sem2'][2], '{0} h.'.format(context['sem2'][2].sem2) ],
[context['sem1'][3], '{0} h.'.format(context['sem1'][3].sem1),'', context['sem2'][3], '{0} h.'.format(context['sem2'][3].sem2) ],
[context['sem1'][4], '{0} h.'.format(context['sem1'][4].sem1),'', context['sem2'][4], '{0} h.'.format(context['sem2'][4].sem2) ],
[context['sem1'][5], '{0} h.'.format(context['sem1'][5].sem1),'', context['sem2'][5], '{0} h.'.format(context['sem2'][5].sem2) ],
[context['sem1'][6], '{0} h.'.format(context['sem1'][6].sem1),'', '', ''],
['Semestre 3', '{0} h.'.format(context['tot3']['sem3__sum']),'', 'Semestre 4', '{0} h.'.format(context['tot4']['sem4__sum'])],
[context['sem3'][0], '{0} h.'.format(context['sem3'][0].sem3),'', context['sem4'][0], '{0} h.'.format(context['sem4'][0].sem4) ],
[context['sem3'][1], '{0} h.'.format(context['sem3'][1].sem3),'', context['sem4'][1], '{0} h.'.format(context['sem4'][1].sem4) ],
[context['sem3'][2], '{0} h.'.format(context['sem3'][2].sem3),'', context['sem4'][2], '{0} h.'.format(context['sem4'][2].sem4) ],
[context['sem3'][3], '{0} h.'.format(context['sem3'][3].sem3),'', context['sem4'][3], '{0} h.'.format(context['sem4'][3].sem4) ],
[context['sem3'][4], '{0} h.'.format(context['sem3'][4].sem3),'', context['sem4'][4], '{0} h.'.format(context['sem4'][4].sem4) ],
[context['sem3'][5], '{0} h.'.format(context['sem3'][5].sem3),'', context['sem4'][5], '{0} h.'.format(context['sem4'][5].sem4) ],
['Semestre 5', '{0} h.'.format(context['tot5']['sem5__sum']),'', 'Semestre 6', '{0} h.'.format(context['tot6']['sem6__sum'])],
[context['sem5'][0], '{0} h.'.format(context['sem5'][0].sem5),'', context['sem6'][0], '{0} h.'.format(context['sem6'][0].sem6) ],
[context['sem5'][1], '{0} h.'.format(context['sem5'][1].sem5),'', context['sem6'][1], '{0} h.'.format(context['sem6'][1].sem6) ],
[context['sem5'][2], '{0} h.'.format(context['sem5'][2].sem5),'', context['sem6'][2], '{0} h.'.format(context['sem6'][2].sem6) ],
[context['sem5'][3], '{0} h.'.format(context['sem5'][3].sem5),'', context['sem6'][3], '{0} h.'.format(context['sem6'][3].sem6) ],
[context['sem5'][4], '{0} h.'.format(context['sem5'][4].sem5),'', context['sem6'][4], '{0} h.'.format(context['sem6'][4].sem6) ],
[context['sem5'][5], '{0} h.'.format(context['sem5'][5].sem5),'', '', '' ],
[context['sem5'][6], '{0} h.'.format(context['sem5'][6].sem5),'', '', '' ],
]
t = Table(data, colWidths=[6.5*cm,1*cm, 1*cm, 6.5*cm, 1*cm], spaceBefore=2*cm, spaceAfter=1.5*cm)
t.setStyle(TableStyle([ ('ALIGN',(0,0),(-1,-1),'LEFT'),
('VALIGN',(0,0),(-1,-1),'TOP'),
('LEFTPADDING', (0,0),(-1,-1), 0),
('SIZE', (0,0), (-1,-1), 8),
('ALIGN', (1,0), (1,-1), 'RIGHT'),
('ALIGN', (-1,0), (-1,-1), 'RIGHT'),
('LINEBELOW', (0,0), (1,0), 1, colors.black),
('LINEBELOW', (3,0), (-1,0), 1, colors.black),
('TOPPADDING', (0,8), (-1,8), 15),
('LINEBELOW', (0,8), (1,8), 1, colors.black),
('LINEBELOW', (3,8), (-1,8), 1, colors.black),
('TOPPADDING', (0,15), (-1,15), 15),
('LINEBELOW', (0,15), (1,15), 1, colors.black),
('LINEBELOW', (3,15), (-1,15), 1, colors.black),
('FONT', (0, 0), (-1, 0), 'Helvetica-Bold'),
('FONT', (0, 8), (-1, 8), 'Helvetica-Bold'),
('FONT', (0, 15), (-1, 15), 'Helvetica-Bold'),
]))
t.hAlign = 0
response.story.append(t)
response.story.append(Paragraph('Total des heures de cours: {0} heures'.format(context['tot']), style_normal))
doc = MyDocTemplate(response)
doc.build(response.story)
with open(filename, mode='rb') as fh:
response = HttpResponse(fh.read(), content_type='application/pdf')
response['Content-Disposition'] = 'attachment; filename="{0}"'.format(filename)
return response
class CompetenceListView(ListView):
model = Competence
template_name = 'cms/competence_list.html'
@ -401,9 +353,6 @@ class TravailPersoListView(ListView):
return get_context(context)
"""
class AddDocument(TemplateView):
template_name = 'cms/upload.html'

View file

@ -39,9 +39,10 @@ INSTALLED_APPS = [
'django.contrib.staticfiles',
'chartjs',
'tinymce',
'cms',
'cms',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
@ -72,9 +73,6 @@ TEMPLATES = [
WSGI_APPLICATION = 'common.wsgi.application'
# Password validation
# https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
@ -128,10 +126,18 @@ STUDENT_IMPORT_MAPPING = {
'Email élève': 'email_rpn',
'Date nais. élève': 'date_naissance',
'Classe': 'klasse',
}
DOMAINE_COULEURS = {'D1':'#fcaf3e', 'D2': '#cc0000', 'D3': '#ef896b', 'D4': '#ad7fa8', 'D5': '#729fcf', 'D6':'#73d216', 'D7':'#ffffff', 'D8':'#babdb6' }
DOMAINE_COULEURS = {
'D1': '#fcaf3e',
'D2': '#cc0000',
'D3': '#ef896b',
'D4': '#ad7fa8',
'D5': '#729fcf',
'D6': '#73d216',
'D7': '#ffffff',
'D8': '#babdb6'
}
TINYMCE_JS_URL = MEDIA_URL + 'js/tiny_mce/tiny_mce.js'
TINYMCE_JS_ROOT = MEDIA_ROOT + 'js/tiny_mce'
@ -146,5 +152,3 @@ TINYMCE_SPELLCHECKER = True
TINYMCE_COMPRESSOR = True
from .local_settings import *

View file

@ -15,10 +15,11 @@ Including another URLconf
"""
from django.conf.urls import url, include
from django.contrib import admin
from cms import views
from django.conf import settings
from django.conf.urls.static import static
from cms import views
urlpatterns = [
url(r'^$', views.HomeView.as_view(), name='home'),
url(r'^plan_pdf/$', views.HomePDFView.as_view(), name='plan-pdf'),
@ -34,15 +35,15 @@ urlpatterns = [
url(r'^evaluation/$', views.EvaluationView.as_view(), name='evaluation'),
url(r'^competences/$', views.CompetenceListView.as_view(), name='competences'),
url(r'^travail/$', views.TravailPersoListView.as_view(), name='travail'),
#url(r'^upload/$', views.AddDocument.as_view(), name='upload'),
#url(r'^download/(?P<file_name>.+)$', views.Download, name='download'),
#url(r'^calendrier/$', views.pdf_view, name='pdf-view'),
# url(r'^upload/$', views.AddDocument.as_view(), name='upload'),
# url(r'^download/(?P<file_name>.+)$', views.Download, name='download'),
# url(r'^calendrier/$', views.pdf_view, name='pdf-view'),
url(r'^module_pdf/(?P<pk>\d+)$', views.ModulePDF.as_view(), name='module-pdf'),
url(r'^documents/$', views.DocumentListView.as_view(), name='document-list'),
url(r'^document/(?P<pk>\d+)$', views.DocumentDetailView.as_view(), name='document-detail'),
url(r'^upload/(?P<pk>\d+)$', views.UploadDetailView.as_view(), name='upload-detail'),
#url(r'^emplois/$', views.EmploiListView.as_view(), name='emploi-list'),
# url(r'^emplois/$', views.EmploiListView.as_view(), name='emploi-list'),
url(r'^tinymce/', include('tinymce.urls'), name='tinymce-js'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT )
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

View file

View file

@ -1,87 +0,0 @@
from django.http.response import HttpResponse
from django.conf import settings
from reportlab.platypus import SimpleDocTemplate
from reportlab.platypus import Paragraph, Spacer, PageBreak, Table, TableStyle, Image
from reportlab.graphics.shapes import Line
from reportlab.lib.pagesizes import A4, landscape
from reportlab.lib.units import cm
from reportlab.lib.enums import TA_LEFT, TA_CENTER
from reportlab.lib import colors
from reportlab.lib.styles import ParagraphStyle as PS
style_8_c = PS(name='CORPS', fontName='Helvetica', fontSize=6, alignment = TA_CENTER)
style_normal = PS(name='CORPS', fontName='Helvetica', fontSize=8, alignment = TA_LEFT)
style_bold = PS(name='CORPS', fontName='Helvetica-Bold', fontSize=10, alignment = TA_LEFT)
style_title = PS(name='CORPS', fontName='Helvetica', fontSize=12, alignment = TA_LEFT)
style_adress = PS(name='CORPS', fontName='Helvetica', fontSize=10, alignment = TA_LEFT, leftIndent=300)
class PDFResponse(HttpResponse):
def __init__(self, filename, title='', portrait=True):
HttpResponse.__init__(self, content_type='application/pdf')
self['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
self['Content-Type'] = 'charset=utf-8'
self.story = []
image = Image(settings.MEDIA_ROOT + '/media/header.png', width=480, height=80)
image.hAlign = TA_LEFT
self.story.append(image)
#self.story.append(Spacer(0,1*cm))
data = [['Filières EDS', title]]
if portrait:
t = Table(data, colWidths=[8*cm,8*cm])
else:
t = Table(data, colWidths=[11*cm,11*cm])
t.setStyle(TableStyle([ ('ALIGN',(0,0),(0,0),'LEFT'),
('ALIGN',(1,0),(-1,-1),'RIGHT'),
('LINEABOVE', (0,0) ,(-1,-1), 0.5, colors.black),
('LINEBELOW', (0,-1),(-1,-1), 0.5, colors.black),
]))
t.hAlign = TA_LEFT
self.story.append(t)
class MyDocTemplate(SimpleDocTemplate):
def __init__(self, name):
SimpleDocTemplate.__init__(self, name, pagesize=A4, topMargin=0*cm)
self.fileName = name
self.PAGE_WIDTH = A4[0]
self.PAGE_HEIGHT = A4[1]
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
def beforePage(self):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()
class MyDocTemplateLandscape(SimpleDocTemplate):
def __init__(self, name):
SimpleDocTemplate.__init__(self, name, pagesize=landscape(A4), topMargin=0*cm, leftMargin=2*cm)
self.fileName = name
self.PAGE_WIDTH = A4[1]
self.PAGE_HEIGHT = A4[0]
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
def beforePage(self):
# page number
self.canv.saveState()
self.canv.setFontSize(8)
self.canv.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber()))
self.canv.restoreState()

View file

@ -2,15 +2,18 @@
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
<html lang="{{ LANGUAGE_CODE|default:"fr" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
{% block extrastyle %}{% endblock %}
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
{% block extrahead %}
<script type="text/javascript" src="{% static "js/tiny_mce/tiny_mce.js" %}"></script>{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
{% block extrastyle %}{% endblock %}
{% if LANGUAGE_BIDI %}
<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />
{% endif %}
{% block extrahead %}
<script type="text/javascript" src="{% static "js/tiny_mce/tiny_mce.js" %}"></script>
{% endblock %}
{% block blockbots %}
<meta name="robots" content="NONE,NOARCHIVE" />
{% endblock %}
</head>
{% load i18n %}

View file

@ -1,15 +1,13 @@
{% extends "./base.html" %}
{% block title %}EDS{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>
{% endblock %}
{% block nav-global %}{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'home' %}">Accueil</a>&nbsp;&nbsp;
<div class="breadcrumbs">
<a href="{% url 'home' %}">Accueil</a>&nbsp;&nbsp;
</div>
{% endblock %}

View file

@ -1,25 +1,28 @@
{% extends "./base_site.html" %}
{% load i18n static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />{% endblock %}
{% block extrastyle %}
{{ block.super }}
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />
{% endblock %}
{% block coltype %}colMS{% endblock %}
{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
{% block bodyclass %}
{{ block.super }} dashboard
{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'home' %}">Accueil</a>
<a href="{% url 'document' %}">Document</a>
<a href="{% url 'home' %}">Accueil</a>
<a href="{% url 'document' %}">Document</a>
</div>
{% endblock %}
{% endblock %}
{% block content %}
<div id="content-main">
Page non trouvée
</div>
<div id="content-main">
Page non trouvée
</div>
{% endblock %}

View file

@ -2,18 +2,16 @@
{% get_current_language as LANGUAGE_CODE %}{% get_current_language_bidi as LANGUAGE_BIDI %}
<html lang="{{ LANGUAGE_CODE|default:"fr" }}" {% if LANGUAGE_BIDI %}dir="rtl"{% endif %}>
<head>
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "admin/css/base.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
<script type="text/javascript" src="{% static "js/tiny_mce/tiny_mce.js" %}"></script>
<script src="{% static 'js/jquery.js' %}"></script>
{% block extrastyle %}<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />{% endblock %}
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
{% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
<title>{% block title %}{% endblock %}</title>
<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "admin/css/base.css" %}" />
<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />
<script type="text/javascript" src="{% static "js/tiny_mce/tiny_mce.js" %}"></script>
<script src="{% static 'js/jquery.js' %}"></script>
{% block extrastyle %}<link rel="stylesheet" type="text/css" href="{% static "css/main.css" %}" />{% endblock %}
{% if LANGUAGE_BIDI %}<link rel="stylesheet" type="text/css" href="{% block stylesheet_rtl %}{% static "admin/css/rtl.css" %}{% endblock %}" />{% endif %}
{% block extrahead %}{% endblock %}
{% block blockbots %}<meta name="robots" content="NONE,NOARCHIVE" />{% endblock %}
</head>
{% load i18n %}

View file

@ -2,35 +2,37 @@
{% block title %}EDS{% endblock %}
{% block branding %}<h1 id="site-name"><a href="{% url 'home' %}">Ecole Santé-social Pierre-Coullery</a> &nbsp;&nbsp;Formation en Education sociale</h1>{% endblock %}
{% block branding %}
<h1 id="site-name"><a href="{% url 'home' %}">Ecole Santé-social Pierre-Coullery</a> &nbsp;&nbsp;Formation en Education sociale</h1>
{% endblock %}
{% block usertools %}
<div id="user-tools">
{% if user.is_authenticated %}
{% block welcome-msg %}Bienvenue <strong>{% firstof user.username %}</strong>.{% endblock %}
<a href="{% url 'home' %}">Site public</a>&nbsp;&nbsp;<a href="{% url 'admin:index' %}">Admin</a>
{% else %}
<a href="{% url 'admin:index' %}">Admin</a>
{% endif %}
</div>
<div id="user-tools">
{% if user.is_authenticated %}
{% block welcome-msg %}Bienvenue <strong>{% firstof user.username %}</strong>.{% endblock %}
<a href="{% url 'home' %}">Site public</a>&nbsp;&nbsp;<a href="{% url 'admin:index' %}">Admin</a>
{% else %}
<a href="{% url 'admin:index' %}">Admin</a>
{% endif %}
</div>
{% endblock %}
{% block nav-global %}{% endblock %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<ul>
<li><a href="{% url 'home' %}">Accueil</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'domaine-list' %}">Domaines</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'processus-list' %}">Processus</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'module-list' %}">Modules</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'periodes' %}">Périodes</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'competences' %}">Compétences</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'travail' %}">Heures de formation</a>&nbsp;&nbsp;</li>
<div class="breadcrumbs">
<ul>
<li><a href="{% url 'home' %}">Accueil</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'domaine-list' %}">Domaines</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'processus-list' %}">Processus</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'module-list' %}">Modules</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'periodes' %}">Périodes</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'competences' %}">Compétences</a>&nbsp;&nbsp;</li>
<li><a href="{% url 'travail' %}">Heures de formation</a>&nbsp;&nbsp;</li>
<!-- <li><a href="{% url 'evaluation' %}">Evaluation</a>&nbsp;&nbsp;</li> -->
<!-- <li><a href="{% url 'evaluation' %}">Evaluation</a>&nbsp;&nbsp;</li> -->
<li><a href="{% url 'document-list' %}">Documents</a>&nbsp;&nbsp;</li>
{% if has_permission %}
<li><a href="#">Calendrier</a>&nbsp;&nbsp;</li>
{% endif %}
</ul>
</div>
<li><a href="{% url 'document-list' %}">Documents</a>&nbsp;&nbsp;</li>
{% if has_permission %}
<li><a href="#">Calendrier</a>&nbsp;&nbsp;</li>
{% endif %}
</ul>
</div>
{% endblock %}

View file

@ -6,17 +6,19 @@
{% block bodyclass %}{{ block.super }}{% endblock %}
{% block content %}
<div id="content-main">
<h1>Liste des compétences du PEC avec les modules correspondants</h1>
<table border="0">
{% for c in object_list %}
<tr><td colspan="3">{{ c }}</td></td></tr>
<tr><th width="10px">&nbsp;</th><td colspan="2"><a href=" {% url 'module-detail' c.module.id %}">{{ c.module }}</a></td></tr>
{% endfor %}
</table>
<h1>Liste des compétences du PEC avec les modules correspondants</h1>
<table border="0">
{% for c in object_list %}
<tr>
<td colspan="3">{{ c }}</td>
</tr>
<tr>
<th width="10px">&nbsp;</th>
<td colspan="2"><a href=" {% url 'module-detail' c.module.id %}">{{ c.module }}</a></td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}

View file

@ -8,14 +8,13 @@
{% block content %}
<div id="content-main">
<div style="margin:auto;width:50%;">
<h1><b>{{object}}</b></h1>
<p>{{object.texte|safe}}</p>
</div>
<div style="height: 600px;width: 400px;">
<object data="media/media/EDS_Calendrier_2017.pdf" type="text/html" codetype="application/pdf" ></object>
</div>
<div style="margin:auto;width:50%;">
<h1><b>{{object}}</b></h1>
<p>{{object.texte|safe}}</p>
</div>
<div style="height: 600px;width: 400px;">
<object data="media/media/EDS_Calendrier_2017.pdf" type="text/html" codetype="application/pdf" ></object>
</div>
</div>
{% endblock %}

View file

@ -7,15 +7,14 @@
{% block content %}
<div id="content-main">
<h1>Liste des documents</h1>
<ol>
{% for doc in object_list %}
<li><a href="{% url 'document-detail' doc.id %}">{{ doc }}</a></li>
{% endfor %}
{% for fic in upload %}
<li><a href="{% url 'upload-detail' fic.id %}">{{ fic.titre }}</a></li>
{% endfor %}
</ol>
<h1>Liste des documents</h1>
<ol>
{% for doc in object_list %}
<li><a href="{% url 'document-detail' doc.id %}">{{ doc }}</a></li>
{% endfor %}
{% for fic in upload %}
<li><a href="{% url 'upload-detail' fic.id %}">{{ fic.titre }}</a></li>
{% endfor %}
</ol>
</div>
{% endblock %}

View file

@ -8,18 +8,17 @@
{% block content %}
<div id="content-main">
<h1>Domaine: {{object}}</h1>
{% for p in object.processus_set.all %}
<div class="processus"><h2>Processus: {{ p.url|safe }}</h2></div>
{% for m in p.module_set.all %}
<div class="module">Module: <a href="/module/{{m.id}}">{{ m }}</a></div>
<div class="competence">Compétences visées</div>
{% for c in m.competences.all %}
<div class="competence">{{ c }}</div>
{% endfor %}
{% endfor %}
{% endfor %}
<h1>Domaine: {{object}}</h1>
{% for p in object.processus_set.all %}
<div class="processus"><h2>Processus: {{ p.url|safe }}</h2></div>
{% for m in p.module_set.all %}
<div class="module">Module: <a href="/module/{{m.id}}">{{ m }}</a></div>
<div class="competence">Compétences visées</div>
{% for c in m.competences.all %}
<div class="competence">{{ c }}</div>
{% endfor %}
{% endfor %}
{% endfor %}
</div>
{% endblock %}

View file

@ -11,20 +11,27 @@
{% block content %}
<div id="content-main">
<h1>Liste des domaines</h1>
<table border="0">
{% for d in object_list %}
<tr><td colspan="3">{{d}}</td></td></tr>
{% for p in d.processus_set.all %}
<tr><th width="10px">&nbsp;</th><td colspan="2"><a href=" {% url 'processus-detail' p.id %}">{{p}}</a></td></tr>
{% for m in p.module_set.all %}
<tr><th colspan="2" width="45px">&nbsp;<td><a href=" {% url 'module-detail' m.id %}">{{m}}</a></td></tr>
{% endfor %}
{% endfor %}
{% endfor %}
</table>
<h1>Liste des domaines</h1>
<table border="0">
{% for d in object_list %}
<tr>
<td colspan="3">{{d}}</td></td>
</tr>
{% for p in d.processus_set.all %}
<tr>
<th width="10px">&nbsp;</th>
<td colspan="2"><a href=" {% url 'processus-detail' p.id %}">{{p}}</a></td>
</tr>
{% for m in p.module_set.all %}
<tr>
<th colspan="2" width="45px">&nbsp;</th>
<td><a href=" {% url 'module-detail' m.id %}">{{m}}</a></td>
</tr>
{% endfor %}
{% endfor %}
{% endfor %}
</table>
</div>
{% endblock %}

View file

@ -49,66 +49,70 @@
</style>
<script type="text/javascript">
$(document).ready(function(){
$('select').change(function(){
cl = $(this).attr('class');
tt = 'select.' + cl +' option:selected'
tot = 0;
max = $(tt).length * 3;
$(tt).each(function(){
tot = tot + parseInt($(this).val());
});
$('#tot_' + cl).text(Math.round(tot/max*100) + ' %');
});
$('ul.tabs li').click(function(){
var tab_id = $(this).attr('data-tab');
$(document).ready(function(){
$('select').change(function(){
cl = $(this).attr('class');
tt = 'select.' + cl +' option:selected'
tot = 0;
max = $(tt).length * 3;
$(tt).each(function(){
tot = tot + parseInt($(this).val());
});
$('#tot_' + cl).text(Math.round(tot/max*100) + ' %');
});
$('ul.tabs li').click(function(){
var tab_id = $(this).attr('data-tab');
$('ul.tabs li').removeClass('current');
$('.tab-content').removeClass('current');
$('ul.tabs li').removeClass('current');
$('.tab-content').removeClass('current');
$(this).addClass('current');
$("#"+tab_id).addClass('current');
$(this).addClass('current');
$("#"+tab_id).addClass('current');
});
});
});
</script>
<div id="content-main">
<h1>Evaluation des compétences</h1>
<div class="container">
<div>
<ul class="tabs">
<li class="tab-link current" data-tab="P01">P01</li>
<li class="tab-link" data-tab="P02">P02</li>
<li class="tab-link" data-tab="P03">P03</li>
<li class="tab-link" data-tab="P04">P04</li>
<li class="tab-link" data-tab="P05">P05</li>
<li class="tab-link" data-tab="P06">P06</li>
<li class="tab-link" data-tab="P07">P07</li>
<li class="tab-link" data-tab="P08">P08</li>
</ul>
<hr/>
</div>
{% for p in object_list %}
<div id="{{p.code}}" class="tab-content">
<table>
<tr><th>{{p}}</th><td width="100px"><div id="tot_{{p.code}}"></div></td></tr>
{% for c in p.competence_set.all %}
<tr><td>{{c}}</td><td><select class="{{p.code}}" ><option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option></select></td></tr>
<h1>Evaluation des compétences</h1>
<div class="container">
<div>
<ul class="tabs">
<li class="tab-link current" data-tab="P01">P01</li>
<li class="tab-link" data-tab="P02">P02</li>
<li class="tab-link" data-tab="P03">P03</li>
<li class="tab-link" data-tab="P04">P04</li>
<li class="tab-link" data-tab="P05">P05</li>
<li class="tab-link" data-tab="P06">P06</li>
<li class="tab-link" data-tab="P07">P07</li>
<li class="tab-link" data-tab="P08">P08</li>
</ul>
<hr>
</div>
{% for p in object_list %}
<div id="{{p.code}}" class="tab-content">
<table>
<tr>
<th>{{p}}</th>
<td width="100px">
<div id="tot_{{p.code}}"></div>
</td>
</tr>
{% for c in p.competence_set.all %}
<tr>
<td>{{c}}</td>
<td>
<select class="{{p.code}}" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</select>
</td>
</tr>
{% endfor %}
</table>
</div>
{% endfor %}
</table>
</div>
{% endfor %}
</div><!-- container -->
</div><!-- container -->
</div>
{% endblock %}

View file

@ -7,99 +7,145 @@
<div id="content-main">
<table id="plan">
<tr>
<th width="300px">Domaines</th>
<th width="600px">Processus</th>
<th width="180px" style="text-align:center;">Sem1</th>
<th width="180px" style="text-align:center;">Sem2</th>
<th width="180px" style="text-align:center;">Sem3</th>
<th width="180px" style="text-align:center;">Sem4</th>
<th width="180px" style="text-align:center;">Sem5</th>
<th width="180px" style="text-align:center;">Sem6</th>
</tr>
<table id="plan">
<tr>
<th width="300px">Domaines</th>
<th width="600px">Processus</th>
<th width="180px" style="text-align:center;">Sem1</th>
<th width="180px" style="text-align:center;">Sem2</th>
<th width="180px" style="text-align:center;">Sem3</th>
<th width="180px" style="text-align:center;">Sem4</th>
<th width="180px" style="text-align:center;">Sem5</th>
<th width="180px" style="text-align:center;">Sem6</th>
</tr>
<tr>
<td rowspan="4" class="l1 d">{{D1.url|safe}}</td>
<td rowspan="2" class="l1 p">{{P01.url|safe}}</td>
<td class="l1 m">{{M01.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="l1 m" >{{M02.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td rowspan="2" class="l1 p">{{P02.url|safe}}</td>
<td></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="l1 m">{{M03.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<tr>
<td rowspan="4" class="l1 d">{{D1.url|safe}}</td>
<td rowspan="2" class="l1 p">{{P01.url|safe}}</td>
<td class="l1 m">{{M01.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr>
<td></td>
<td class="l1 m">{{ M04.url_code|safe }}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<!-- Ligne 2 -->
<tr>
<td rowspan="3" class="l2 d">{{D2.url|safe}}</td>
<td class="l2 p">{{P03.url|safe}}</td>
<td class="l2 m">{{M05.url_code|safe}}</td>
<td>&nbsp;</td>
<td class="l2 m">{{M06.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td rowspan="2" class="l2 p">{{P04.url|safe}}</td>
<td></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="l2 m">{{M07.url_code|safe}}</td>
<td class="l2 m">{{M09.url_code|safe}}</td>
</tr>
<tr>
<td></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="l2 m">{{M08.url_code|safe}}</td
><td>&nbsp;</td>
</tr>
<td class="l1 m" >{{M02.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr>
<td rowspan="2" class="l1 p">{{P02.url|safe}}</td>
<td></td><td>&nbsp;</td><td>&nbsp;</td><td class="l1 m">{{M03.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr>
<!-- Ligne 3 -->
<tr>
<td rowspan="2" class="l3 d">{{D3.url|safe}}</td>
<td class="l3 p">{{P05.url|safe}}</td>
<td >&nbsp;</td>
<td>&nbsp;</td>
<td colspan="2" class="l3 m">{{M10.url_code|safe}}</td>
<td class="l3 m">{{M12.url_code|safe}}</td>
<td>&nbsp;</td>
</tr>
<tr>
<td class="l3 p">{{P06.url|safe}}</td>
<td >&nbsp;</td>
<td>&nbsp;</td>
<td colspan="2" class="l3 m">{{M11.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<!-- Ligne 4 -->
<tr>
<td class="l4 d">{{D4.url|safe}}</td>
<td class="l4 p">{{P07.url|safe}}</td>
<td >&nbsp;</td>
<td>&nbsp;</td>
<td class="l4 m">{{M13.url_code|safe}}</td>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td class="l4 m">{{M14.url_code|safe}}</td>
</tr>
<td></td><td class="l1 m">{{ M04.url_code|safe }}</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<!-- Ligne 2 -->
<tr>
<td rowspan="3" class="l2 d">{{D2.url|safe}}</td>
<td class="l2 p">{{P03.url|safe}}</td>
<td class="l2 m">{{M05.url_code|safe}}</td><td>&nbsp;</td><td class="l2 m">{{M06.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<tr>
<td rowspan="2" class="l2 p">{{P04.url|safe}}</td>
<td></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td class="l2 m">{{M07.url_code|safe}}</td><td class="l2 m">{{M09.url_code|safe}}</td>
</tr>
<tr>
<td></td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td class="l2 m">{{M08.url_code|safe}}</td><td>&nbsp;</td>
</tr>
<!-- Ligne 5 -->
<tr>
<td class="l5 d">{{D5.url|safe}}</td>
<td class="l5 p">{{P08.url|safe}}</td>
<td colspan="6" class="l5 m">{{M15.url_code|safe}}</td>
</tr>
<!-- Ligne 3 -->
<tr>
<td rowspan="2" class="l3 d">{{D3.url|safe}}</td>
<td class="l3 p">{{P05.url|safe}}</td>
<td >&nbsp;</td><td>&nbsp;</td><td colspan="2" class="l3 m">{{M10.url_code|safe}}</td><td class="l3 m">{{M12.url_code|safe}}</td><td>&nbsp;</td>
</tr>
<tr>
<td class="l3 p">{{P06.url|safe}}</td>
<td >&nbsp;</td><td>&nbsp;</td><td colspan="2" class="l3 m">{{M11.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td>
</tr>
<!-- Ligne 4 -->
<tr>
<td class="l4 d">{{D4.url|safe}}</td>
<td class="l4 p">{{P07.url|safe}}</td>
<td >&nbsp;</td><td>&nbsp;</td><td class="l4 m">{{M13.url_code|safe}}</td><td>&nbsp;</td><td>&nbsp;</td><td class="l4 m">{{M14.url_code|safe}}</td>
</tr>
<!-- Ligne 6 -->
<tr>
<td class="l6 d">{{D6.url|safe}}</td>
<td class="l6 p">{{P09.url|safe}}</td>
<td colspan="2" class="l6 m">{{M16_1a.url_code|safe}} / {{M16_1b.url_code|safe}} / {{M16_1c.url_code|safe}} / {{M16_1d.url_code|safe}} / {{M16_1e.url_code|safe}}</td>
<td colspan="2" class="l6 m">{{M16_2a.url_code|safe}} / {{M16_2b.url_code|safe}} / {{M16_2c.url_code|safe}}</td>
<td colspan="2" class="l6 m">{{M16_3a.url_code|safe}} / {{M16_3b.url_code|safe}}</td>
</tr>
<!-- Ligne 7 -->
<tr>
<td class="l7 d">{{D7.url|safe}}</td>
<td class="l7 p">{{P10.url|safe}}</td>
<td colspan="2" class="l7 m">{{M17_1.url_code|safe}}</td>
<td colspan="2" class="l7 m">{{M17_2.url_code|safe}}</td>
<td colspan="2" class="l7 m">{{M17_3.url_code|safe}}</td>
</tr>
<!-- Ligne 5 -->
<tr>
<td class="l5 d">{{D5.url|safe}}</td>
<td class="l5 p">{{P08.url|safe}}</td>
<td colspan="6" class="l5 m">{{M15.url_code|safe}}</td>
</tr>
<!-- Ligne 6 -->
<tr>
<td class="l6 d">{{D6.url|safe}}</td>
<td class="l6 p">{{P09.url|safe}}</td>
<td colspan="2" class="l6 m">{{M16_1a.url_code|safe}} / {{M16_1b.url_code|safe}} / {{M16_1c.url_code|safe}} / {{M16_1d.url_code|safe}} / {{M16_1e.url_code|safe}}</td>
<td colspan="2" class="l6 m">{{M16_2a.url_code|safe}} / {{M16_2b.url_code|safe}} / {{M16_2c.url_code|safe}}</td>
<td colspan="2" class="l6 m">{{M16_3a.url_code|safe}} / {{M16_3b.url_code|safe}}</td>
</tr>
<!-- Ligne 7 -->
<tr>
<td class="l7 d">{{D7.url|safe}}</td>
<td class="l7 p">{{P10.url|safe}}</td>
<td colspan="2" class="l7 m">{{M17_1.url_code|safe}}</td>
<td colspan="2" class="l7 m">{{M17_2.url_code|safe}}</td>
<td colspan="2" class="l7 m">{{M17_3.url_code|safe}}</td>
</tr>
<!-- Ligne 8 -->
<tr>
<td class="l8 d">{{D8.url|safe}}</td>
<td class="l8 p">{{P11.url|safe}}</td>
<td colspan="6" class="l8 m">{{MACC.url_code|safe}}</td>
</tr>
</table>
<br/>
<a href="{% url 'plan-pdf' %}">Imprimer en PDF</a>
<!-- Ligne 8 -->
<tr>
<td class="l8 d">{{D8.url|safe}}</td>
<td class="l8 p">{{P11.url|safe}}</td>
<td colspan="6" class="l8 m">{{MACC.url_code|safe}}</td>
</tr>
</table>
<br>
<a href="{% url 'plan-pdf' %}">Imprimer en PDF</a>
</div>
{% endblock %}

View file

@ -4,44 +4,90 @@
{% block coltype %}colMS{% endblock %}
{% block content %}
<div id="content-main">
<h1>{{object}}</h1>
<table>
<tr><th width="100px">Domaine</th><td>{{object.processus.domaine.url|safe}}</td></tr>
<tr><th>Processus</th><td>{{object.processus.url|safe}}</td></tr>
<tr><th>Situation emblématique</th><td>{{object.situation|linebreaksbr}}</td></tr>
<tr><th>Compétences visées</th><td><p>L'éducateur social, l'éducatrice sociale:</p>
{% for c in object.competence_set.all %}- {{c.nom}} ({{c.code}})<br />{% endfor %}</td></tr>
<tr><th>Plus-value sur le CFC ASE</th><td>
{% for c in object.competence_set.all %}
{% for sc in c.souscompetence_set.all %}
- {{sc.nom}} (voir {{sc.competence.code}}) <br />
{%endfor %}
{% endfor %}
</td></tr>
<!-- <tr><th>Ressources à acquérir</th><td>{% for c in object.ressource_set.all %}- {{c}}<br />{% endfor %}</td></tr> -->
<tr><th>Objectifs à atteindre</th><td>{% for c in object.objectif_set.all %}- {{c}}<br />{% endfor %}</td></tr>
<tr><th>Didactique</th><td>{{ object.didactique }}</td></tr>
<!-- <tr><th>Contenu</th><td>{{object.contenu|linebreaksbr}}</td></tr> -->
<tr><th>Evaluation</th><td>{{object.evaluation|linebreaksbr}}</td></tr>
<tr><th>Type</th><td>{{object.type}}, obligatoire</td></tr>
<tr><th>Semestre</th><td>Sem. {{object.semestre}}</td></tr>
{% if object.periode_presentiel > 0 %}
<tr><th>Présentiel</th><td>{{object.periode_presentiel}} heures</td></tr>
{% endif %}
{% if object.pratique_prof > 0 %}
<tr><th>Pratique prof.</th><td>{{object.pratique_prof}} heures</td></tr>
{% endif %}
{% if object.travail_perso > 0 %}
<tr><th>Travail perso.</th><td>{{object.travail_perso}} heures</td></tr>
{% endif %}
<tr><th>Responsable</th><td>{{object.processus.domaine.responsable.descr|safe}}</td></tr>
</table>
<p><a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a></p>
<h1>{{object}}</h1>
<table>
<tr>
<th width="100px">Domaine</th>
<td>{{object.processus.domaine.url|safe}}</td>
</tr>
<tr>
<th>Processus</th>
<td>{{object.processus.url|safe}}</td>
</tr>
<tr>
<th>Situation emblématique</th>
<td>{{object.situation|linebreaksbr}}</td>
</tr>
<tr>
<th>Compétences visées</th>
<td>
<p>L'éducateur social, l'éducatrice sociale:</p>
{% for c in object.competence_set.all %}
- {{c.nom}} ({{c.code}})<br>
{% endfor %}
</td>
</tr>
<tr>
<th>Plus-value sur le CFC ASE</th>
<td>
{% for c in object.competence_set.all %}
{% for sc in c.souscompetence_set.all %}
- {{sc.nom}} (voir {{sc.competence.code}}) <br>
{%endfor %}
{% endfor %}
</td>
</tr>
<!-- <tr><th>Ressources à acquérir</th><td>{% for c in object.ressource_set.all %}- {{c}}<br />{% endfor %}</td></tr> -->
<tr>
<th>Objectifs à atteindre</th>
<td>
{% for c in object.objectif_set.all %}
- {{c}}<br>
{% endfor %}
</td>
</tr>
<tr>
<th>Didactique</th>
<td>{{ object.didactique }}</td>
</tr>
<!-- <tr><th>Contenu</th><td>{{object.contenu|linebreaksbr}}</td></tr> -->
<tr>
<th>Evaluation</th>
<td>{{object.evaluation|linebreaksbr}}</td>
</tr>
<tr>
<th>Type</th>
<td>{{object.type}}, obligatoire</td>
</tr>
<tr>
<th>Semestre</th>
<td>Sem. {{object.semestre}}</td>
</tr>
{% if object.periode_presentiel > 0 %}
<tr>
<th>Présentiel</th>
<td>{{object.periode_presentiel}} heures</td>
</tr>
{% endif %}
{% if object.pratique_prof > 0 %}
<tr>
<th>Pratique prof.</th>
<td>{{object.pratique_prof}} heures</td>
</tr>
{% endif %}
{% if object.travail_perso > 0 %}
<tr>
<th>Travail perso.</th>
<td>{{object.travail_perso}} heures</td>
</tr>
{% endif %}
<tr>
<th>Responsable</th>
<td>{{object.processus.domaine.responsable.descr|safe}}</td>
</tr>
</table>
<p><a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a></p>
</div>
{% endblock %}

View file

@ -6,35 +6,83 @@
{% block content %}
<div id="content-main">
<h1>{{object}}</h1>
<table>
<tr><th>Domaine</th><td>{{object.processus.domaine.url|safe}}</td></tr>
<tr><th>Processus</th><td>{{object.processus.url|safe}}</td></tr>
<tr><th>Situation emblématique</th><td>{{object.situation|linebreaksbr}}</td></tr>
<tr><th>Compétences visées</th><td><p>L'éducateur social, l'éducatrice sociale:</p>
{% for c in object.competence_set.all %}- {{c.nom}} ({{c.code}})<br />
{% if user.is_authenticated %}
{% for sc in c.souscompetence_set.all %}&nbsp;&nbsp;&nbsp; -- {{sc.nom}} <br />{%endfor %}{% endif %}{% endfor %}</td></tr>
<!-- <tr><th>Ressources à acquérir</th><td>{% for c in object.ressource_set.all %}- {{c}}<br />{% endfor %}</td></tr> -->
<tr><th>Objectifs à atteindre</th><td>{% for c in object.objectif_set.all %}- {{c}}<br />{% endfor %}</td></tr>
<tr><th>Didactique</th><td>{{ object.didactique }}</td></tr>
<!-- <tr><th>Contenu</th><td>{{object.contenu|linebreaksbr}}</td></tr> -->
<tr><th>Evaluation</th><td>{{object.evaluation|linebreaksbr}}</td></tr>
<tr><th>Type</th><td>{{object.type}}, obligatoire</td></tr>
<tr><th>Semestre</th><td>Sem. {{object.semestre}}</td></tr>
{% if object.periode_presentiel > 0 %}
<tr><th>Présentiel</th><td>{{object.periode_presentiel}} heures</td></tr>
{% endif %}
{% if object.pratique_prof > 0 %}
<tr><th>Pratique prof.</th><td>{{object.pratique_prof}} heures</td></tr>
{% endif %}
{% if object.travail_perso > 0 %}
<tr><th>Travail perso.</th><td>{{object.travail_perso}} heures</td></tr>
{% endif %}
<tr><th>Responsable</th><td>{{object.processus.domaine.responsable.descr|safe}}</td></tr>
</table>
<p><a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a></p>
<h1>{{object}}</h1>
<table>
<tr>
<th>Domaine</th>
<td>{{object.processus.domaine.url|safe}}</td>
</tr>
<tr>
<th>Processus</th>
<td>{{object.processus.url|safe}}</td>
</tr>
<tr>
<th>Situation emblématique</th>
<td>{{object.situation|linebreaksbr}}</td>
</tr>
<tr>
<th>Compétences visées</th>
<td><p>L'éducateur social, l'éducatrice sociale:</p>
{% for c in object.competence_set.all %}
- {{c.nom}} ({{c.code}})<br>
{% if user.is_authenticated %}
{% for sc in c.souscompetence_set.all %}
&nbsp;&nbsp;&nbsp; -- {{sc.nom}} <br>
{%endfor %}
{% endif %}
{% endfor %}
</td>
</tr>
<!-- <tr><th>Ressources à acquérir</th><td>{% for c in object.ressource_set.all %}- {{c}}<br />{% endfor %}</td></tr> -->
<tr>
<th>Objectifs à atteindre</th>
<td>
{% for c in object.objectif_set.all %}
- {{c}}<br>
{% endfor %}
</td>
</tr>
<tr>
<th>Didactique</th>
<td>{{ object.didactique }}</td>
</tr>
<!-- <tr><th>Contenu</th><td>{{object.contenu|linebreaksbr}}</td></tr> -->
<tr>
<th>Evaluation</th>
<td>{{object.evaluation|linebreaksbr}}</td>
</tr>
<tr>
<th>Type</th>
<td>{{object.type}}, obligatoire</td>
</tr>
<tr>
<th>Semestre</th>
<td>Sem. {{object.semestre}}</td>
</tr>
{% if object.periode_presentiel > 0 %}
<tr>
<th>Présentiel</th>
<td>{{object.periode_presentiel}} heures</td>
</tr>
{% endif %}
{% if object.pratique_prof > 0 %}
<tr>
<th>Pratique prof.</th>
<td>{{object.pratique_prof}} heures</td>
</tr>
{% endif %}
{% if object.travail_perso > 0 %}
<tr>
<th>Travail perso.</th>
<td>{{object.travail_perso}} heures</td>
</tr>
{% endif %}
<tr>
<th>Responsable</th>
<td>{{object.processus.domaine.responsable.descr|safe}}</td>
</tr>
</table>
<p><a href="{% url 'module-pdf' object.id %}">Imprimer en PDF</a></p>
</div>
{% endblock %}

View file

@ -8,14 +8,15 @@
{% block content %}
<div id="content-main">
<h1>Liste des modules</h1>
<table>
{% for m in object_list %}
<tr><th>{{m.code}}</th><td><a href=" {% url 'module-detail' m.id %}">{{m.nom}}</a></td></tr>
{% endfor %}
</table>
<h1>Liste des modules</h1>
<table>
{% for m in object_list %}
<tr>
<th>{{m.code}}</th>
<td><a href=" {% url 'module-detail' m.id %}">{{m.nom}}</a></td>
</tr>
{% endfor %}
</table>
</div>
{% endblock %}

View file

@ -5,60 +5,99 @@
{% block content %}
<div id="content-main">
<h1>Périodes de formation</h1>
<table>
<tr><th width="290px">Semestre 1</th><th text-align="right">{{tot1.sem1__sum}}h.</th><th width="40px"></th><th width="290px">Semestre 2</th><th text-align="right">{{tot2.sem2__sum}}h.</th></tr>
<tr><td colspan="2"><table align="left">
{% for s in sem1 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem1}} h.</td></tr>
{% endfor %}
</table>
</td>
<td></td>
<td colspan="2">
<table align="left">
{% for s in sem2 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem2}} h.</td></tr>
{% endfor %}
</table>
</td></tr>
<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>Semestre 3</th><th text-align="right">{{tot3.sem3__sum}}h.</th><th></th><th>Semestre 4</th><th text-align="right">{{tot4.sem4__sum}}h.</th> </tr>
<tr><td colspan="2"><table align="left">
{% for s in sem3 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem3}} h.</td></tr>
{% endfor %}
</table></td>
<td></td>
<td colspan="2"><table align="left">
{% for s in sem4 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem4}} h.</td></tr>
{% endfor %}
</table></td></tr>
<tr><td>&nbsp;</td><td>&nbsp;</td></tr>
<tr><th>Semestre 5</th><th text-align="right">{{tot5.sem5__sum}}h.</th><th></th><th>Semestre 6</th><th text-align="right">{{tot6.sem6__sum}}h.</th></tr>
<tr><td colspan="2"><table align="left">
{% for s in sem5 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem5}} h.</td></tr>
{% endfor %}
</table></td>
<td></td>
<td colspan="2">
<table align="left">
{% for s in sem6 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem6}} h.</td></tr>
{% endfor %}
</table>
</td></tr>
</table>
<br/>
Total des heures de cours: {{tot}} heures
<br/><br/>
<a href="{% url 'periodes-pdf' %}">Imprimer en PDF</a>
<h1>Périodes de formation</h1>
<table>
<tr>
<th width="290px">Semestre 1</th>
<th text-align="right">{{tot1}}h.</th>
<th width="40px"></th>
<th width="290px">Semestre 2</th>
<th text-align="right">{{tot2}}h.</th>
</tr>
<tr>
<td colspan="2">
<table align="left">
{% for s in sem1 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem1}} h.</td></tr>
{% endfor %}
</table>
</td>
<td></td>
<td colspan="2">
<table align="left">
{% for s in sem2 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem2}} h.</td></tr>
{% endfor %}
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<th>Semestre 3</th>
<th text-align="right">{{tot3}}h.</th>
<th></th>
<th>Semestre 4</th>
<th text-align="right">{{tot4}}h.</th>
</tr>
<tr>
<td colspan="2">
<table align="left">
{% for s in sem3 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem3}} h.</td></tr>
{% endfor %}
</table>
</td>
<td></td>
<td colspan="2">
<table align="left">
{% for s in sem4 %}
<tr>
<td width="290px">{{s}}</td>
<td>{{s.sem4}} h.</td>
</tr>
{% endfor %}
</table>
</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<th>Semestre 5</th>
<th text-align="right">{{tot5}}h.</th>
<th></th>
<th>Semestre 6</th>
<th text-align="right">{{tot6}}h.</th>
</tr>
<tr>
<td colspan="2">
<table align="left">
{% for s in sem5 %}
<tr><td width="290px">{{s}}</td><td>{{s.sem5}} h.</td></tr>
{% endfor %}
</table>
</td>
<td></td>
<td colspan="2">
<table align="left">
{% for s in sem6 %}
<tr>
<td width="290px">{{s}}</td>
<td>{{s.sem6}} h.</td>
</tr>
{% endfor %}
</table>
</td>
</tr>
</table>
<br>
<p><strong>Total des heures de cours: {{tot}} heures</strong></p>
<a href="{% url 'periodes-pdf' %}">Imprimer en PDF</a>
</div>
{% endblock %}

View file

@ -1,29 +1,46 @@
{% extends "./base_site.html" %}
{% load i18n static %}
{% block coltype %}colMS{% endblock %}
{% block bodyclass %}{{ block.super }} dashboard{% endblock %}
{% block content %}
<div id="content-main">
<h1>{{object}}</h1>
<table>
<tr><th width="100px">Description</th><td>{{object.description}}</td></tr>
<tr><th>Compétences visées</th><td><p>L'éducateur social, l'éducatrice sociale:</p>
{% for m in object.module_set.all %}{% for c in m.competences.all %}
- {{c.libelle}} ({{c.code}})<br />{% endfor %}{% endfor %}</td></tr>
<tr><th>Domaine</th><td>{{object.domaine.url|safe}}</td></tr>
<tr><th>Responsable</th><td>{{object.domaine.responsable.descr|safe}}</td></tr>
<tr><th>Modules concernés</th><td>{% for m in object.module_set.all %}{{m.url|safe}}</br>{% endfor %}</td></tr>
</table>
<h1>{{object}}</h1>
<table>
<tr>
<th width="100px">Description</th>
<td>{{object.description}}</td>
</tr>
<tr>
<th>Compétences visées</th>
<td>
<p>L'éducateur social, l'éducatrice sociale:</p>
{% for m in object.module_set.all %}
{% for c in m.competences.all %}
- {{c.libelle}} ({{c.code}})<br>
{% endfor %}
{% endfor %}
</td>
</tr>
<tr>
<th>Domaine</th>
<td>{{object.domaine.url|safe}}</td>
</tr>
<tr>
<th>Responsable</th>
<td>{{object.domaine.responsable.descr|safe}}</td>
</tr>
<tr>
<th>Modules concernés</th>
<td>
{% for m in object.module_set.all %}
{{m.url|safe}}<br>
{% endfor %}
</td>
</tr>
</table>
</div>
{% endblock %}

View file

@ -1,27 +1,27 @@
{% extends "./base_site.html" %}
{% load i18n static %}
{% block coltype %}colMS{% endblock %}
{% block bodyclass %}{{ block.super }}{% endblock %}
{% block content %}
<div id="content-main">
<h1>Liste des processus</h1>
<table>
{% for p in object_list %}
<tr><th>{{p.code}}</th><td><a href=" {% url 'processus-detail' p.id %}">{{p.nom}}</a></td></tr>
{% for m in p.module_set.all %}
<tr><th>&nbsp;</th><td><a href=" {% url 'module-detail' m.id %}">{{m}}</a></td></tr>
{% endfor %}
{% endfor %}
</table>
<h1>Liste des processus</h1>
<table>
{% for p in object_list %}
<tr>
<th>{{p.code}}</th>
<td><a href=" {% url 'processus-detail' p.id %}">{{p.nom}}</a></td>
</tr>
{% for m in p.module_set.all %}
<tr>
<th>&nbsp;</th>
<td><a href=" {% url 'module-detail' m.id %}">{{m}}</a></td>
</tr>
{% endfor %}
{% endfor %}
</table>
</div>
{% endblock %}

View file

@ -8,29 +8,52 @@
{% block content %}
<div id="content-main">
<h1>Répartion des heures de formation</h1>
<table border="0">
<tr><th>Module</th><th >Heures de cours</th><th>Travail perso.</th><th>Pratique prof.</th></tr>
{% for m in object_list %}
<tr>
<td >
{% if forloop.last %}
{{ m }} - Travail de diplôme
{% else %}
{{ m }}
{% endif %}
</td>
<td align="center">{% if m.periode_presentiel == 0 %} &nbsp; {% else %} {{ m.periode_presentiel|rjust:"3" }} h. {% endif %}</td>
<td align="center">{% if m.travail_perso == 0 %} &nbsp; {% else %} {{ m.travail_perso|rjust:"3" }} h. {% endif %}</td>
<td align="center">{% if m.pratique_prof == 0 %} &nbsp; {% else %} {{ m.pratique_prof|rjust:"3" }} h.{% endif %}</td>
</tr>
{% endfor %}
<tr>
<th >Total</th>
<th>{{ total_perso }} heures</th>
<th>{{ total_presentiel }} heures</th>
<th>{{ total_pratique }} heures</th>
</tr>
</table>
<h1>Répartion des heures de formation</h1>
<table border="0">
<tr>
<th>Module</th>
<th >Heures de cours</th>
<th>Travail perso.</th>
<th>Pratique prof.</th>
</tr>
{% for m in object_list %}
<tr>
<td >
{% if forloop.last %}
{{ m }} - Travail de diplôme
{% else %}
{{ m }}
{% endif %}
</td>
<td align="center">
{% if m.periode_presentiel == 0 %}
&nbsp;
{% else %}
{{ m.periode_presentiel|rjust:"3" }} h.
{% endif %}
</td>
<td align="center">
{% if m.travail_perso == 0 %}
&nbsp;nbsp;
{% else %}
{{ m.travail_perso|rjust:"3" }} h.
{% endif %}
</td>
<td align="center">
{% if m.pratique_prof == 0 %}
&nbsp;
{% else %}
{{ m.pratique_prof|rjust:"3" }} h.
{% endif %}
</td>
</tr>
{% endfor %}
<tr>
<th >Total</th>
<th>{{ total_perso }} heures</th>
<th>{{ total_presentiel }} heures</th>
<th>{{ total_pratique }} heures</th>
</tr>
</table>
</div>
{% endblock %}

View file

@ -10,39 +10,34 @@
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'home' %}">Accueil</a>
<a href="{% url 'upload' %}">Document</a>
<a href="{% url 'home' %}">Accueil</a>
<a href="{% url 'upload' %}">Document</a>
</div>
{% endblock %}
{% endblock %}
{% block content %}
<div id="content-main">
<h1>Enregistrements de documents</h1>
{% if documents %}
<ul class="liste-verticale">
{% for document in documents %}
<li><a href="download/{{ document.docfile.name }}">{{document.docfile.name}}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No documents.</p>
{% endif %}
<!-- Upload form. Note enctype attribute! -->
<div class="clear-booth">&nbsp;
<form action="{% url 'upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p><input type="submit" value="Upload" /></p>
</form>
<div id="content-main">
<h1>Enregistrements de documents</h1>
{% if documents %}
<ul class="liste-verticale">
{% for document in documents %}
<li><a href="download/{{ document.docfile.name }}">{{document.docfile.name}}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No documents.</p>
{% endif %}
<!-- Upload form. Note enctype attribute! -->
<div class="clear-booth">&nbsp;
<form action="{% url 'upload' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>{{ form.docfile.errors }} {{ form.docfile }}</p>
<p><input type="submit" value="Upload" /></p>
</form>
</div>
</div>
</div>
{% endblock %}

View file

@ -3,13 +3,10 @@
{% block coltype %}colMS{% endblock %}
{% block content %}
<div id="content-main">
<iframe src="{{fichier}}" width="1200" height="800" align="middle"></iframe>
<iframe src="{{fichier}}" width="1200" height="800" align="middle"></iframe>
</div>
{% endblock %}