From 67dc9bcb007ef0487d1d50cdc86743e124b3dea8 Mon Sep 17 00:00:00 2001 From: alazo Date: Sun, 29 Jan 2017 20:43:47 +0100 Subject: [PATCH] beta2 --- .gitignore | 3 + cms/admin.py | 33 ++++--- cms/forms.py | 54 +++++++++++- cms/migrations/0014_auto_20170127_1444.py | 64 ++++++++++++++ cms/migrations/0015_auto_20170129_0700.py | 20 +++++ .../0016_remove_module_description.py | 19 ++++ cms/models.py | 57 ++++++------ cms/views.py | 81 ++++++++++++------ common/settings.py | 14 +++ common/urls.py | 1 + media/media/header.png | Bin 0 -> 95667 bytes templates/cms/base_site.html | 2 +- templates/cms/index.html | 2 +- templates/cms/module_detail.html | 8 +- templates/cms/periodes.html | 2 +- templates/cms/processus_list.html | 2 +- 16 files changed, 290 insertions(+), 72 deletions(-) create mode 100644 cms/migrations/0014_auto_20170127_1444.py create mode 100644 cms/migrations/0015_auto_20170129_0700.py create mode 100644 cms/migrations/0016_remove_module_description.py create mode 100644 media/media/header.png diff --git a/.gitignore b/.gitignore index 4383301..db8d214 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,8 @@ *.pyc common/local_settings.py db.sqlite3 +db.eds +db.* *.sql +*.csv diff --git a/cms/admin.py b/cms/admin.py index 941635b..669a5c3 100644 --- a/cms/admin.py +++ b/cms/admin.py @@ -1,8 +1,7 @@ from django.contrib import admin from .models import (Enseignant, Domaine, Competence, SousCompetence, Objectif, Ressource, Module, Processus) -from django.forms.widgets import Widget -from django.forms import widgets +from .forms import ProcessusAdminForm, ModuleAdminForm, DomaineAdminForm # Register your models here. class SousCompetenceInline(admin.TabularInline): @@ -14,27 +13,41 @@ class CompetenceInline(admin.TabularInline): extra=0 #template ='templates/admin/cms/processus/edit_inline/tabular.html' +class RessourceAdmin(admin.ModelAdmin): + list_display = ('nom', 'module') + class ModuleAdmin(admin.ModelAdmin): + form = ModuleAdminForm inlines = [CompetenceInline,] extra = 0 class ProcessusAdmin(admin.ModelAdmin): - inlines = (CompetenceInline,) + form = ProcessusAdminForm +class ProcessusAdminInline(admin.TabularInline): + model = Processus + extra=0 + + class CompetenceAdmin(admin.ModelAdmin): + list_display = ('code', 'nom', 'module') + list_editable = ('module',) inlines = (SousCompetenceInline,) + -class RessourceAdmin(admin.ModelAdmin): - pass - - +class DomaineAdmin(admin.ModelAdmin): + list_display = ('nom', 'responsable',) + form = DomaineAdminForm + inlines = [ProcessusAdminInline,] + + admin.site.register(Enseignant) -admin.site.register(Domaine) +admin.site.register(Domaine, DomaineAdmin) admin.site.register(Competence, CompetenceAdmin) admin.site.register(SousCompetence) admin.site.register(Objectif) -admin.site.register(Ressource) -admin.site.register(Module) +admin.site.register(Ressource, RessourceAdmin) +admin.site.register(Module, ModuleAdmin) admin.site.register(Processus, ProcessusAdmin) diff --git a/cms/forms.py b/cms/forms.py index dbc3d80..ec95593 100644 --- a/cms/forms.py +++ b/cms/forms.py @@ -4,9 +4,57 @@ Created on 17 nov. 2012 @author: alzo ''' - +from .models import Processus, Module, Domaine from django import forms +from django.contrib import admin +from _collections_abc import __all__ +#from django.forms import Textarea, TextInput + + class DocumentForm(forms.Form): - docfile = forms.FileField(label='Selectionner un fichier', - help_text='Taille max.: 42 megabytes') \ No newline at end of file + docfile = forms.FileField(label='Selectionner un fichier', help_text='Taille max.: 42 megabytes') + +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': 75, 'rows':2}), + } + +class DomaineAdminForm(forms.ModelForm): + + def __init__(self, *args, **kwargs): + super(DomaineAdminForm, self).__init__(*args, **kwargs) + + class Meta: + model = Domaine + fields = ('code', 'nom', 'responsable') + widgets = { + 'nom': forms.Textarea(attrs={'cols': 75, 'rows':2}), + } + +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__') + widgets = { + 'nom': forms.Textarea(attrs={'cols': 73, 'rows':2}), + 'description': forms.Textarea(attrs={'cols': 73, 'rows':4}), + 'situation': forms.Textarea(attrs={'cols': 73, 'rows':6}), + 'contenu': forms.Textarea(attrs={'cols': 73, 'rows':4}), + 'didactique': forms.Textarea(attrs={'cols': 73, 'rows':4}), + 'evaluation': forms.Textarea(attrs={'cols': 73, 'rows':2}), + } + \ No newline at end of file diff --git a/cms/migrations/0014_auto_20170127_1444.py b/cms/migrations/0014_auto_20170127_1444.py new file mode 100644 index 0000000..4ab8d0e --- /dev/null +++ b/cms/migrations/0014_auto_20170127_1444.py @@ -0,0 +1,64 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-27 14:44 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0013_auto_20170108_2119'), + ] + + operations = [ + migrations.RenameField( + model_name='competence', + old_name='libelle', + new_name='nom', + ), + migrations.RenameField( + model_name='domaine', + old_name='libelle', + new_name='nom', + ), + migrations.RenameField( + model_name='processus', + old_name='libelle', + new_name='nom', + ), + migrations.RenameField( + model_name='ressource', + old_name='libelle', + new_name='nom', + ), + migrations.RenameField( + model_name='souscompetence', + old_name='libelle', + new_name='nom', + ), + migrations.RemoveField( + model_name='competence', + name='processus', + ), + migrations.RemoveField( + model_name='module', + name='competences', + ), + migrations.AddField( + model_name='competence', + name='module', + field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='cms.Module'), + ), + migrations.AlterField( + model_name='module', + name='didactique', + field=models.TextField(), + ), + migrations.AlterField( + model_name='module', + name='evaluation', + field=models.TextField(), + ), + ] diff --git a/cms/migrations/0015_auto_20170129_0700.py b/cms/migrations/0015_auto_20170129_0700.py new file mode 100644 index 0000000..0bec6e0 --- /dev/null +++ b/cms/migrations/0015_auto_20170129_0700.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-29 07:00 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0014_auto_20170127_1444'), + ] + + operations = [ + migrations.RenameField( + model_name='objectif', + old_name='libelle', + new_name='nom', + ), + ] diff --git a/cms/migrations/0016_remove_module_description.py b/cms/migrations/0016_remove_module_description.py new file mode 100644 index 0000000..1ba0d86 --- /dev/null +++ b/cms/migrations/0016_remove_module_description.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2017-01-29 19:24 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('cms', '0015_auto_20170129_0700'), + ] + + operations = [ + migrations.RemoveField( + model_name='module', + name='description', + ), + ] diff --git a/cms/models.py b/cms/models.py index dd0a4ed..734c2e1 100644 --- a/cms/models.py +++ b/cms/models.py @@ -52,14 +52,14 @@ class Enseignant(models.Model): class Domaine(models.Model): code = models.CharField(max_length=20, blank=True) - libelle = models.CharField(max_length=200, blank=False) + nom = models.CharField(max_length=200, blank=False) responsable = models.ForeignKey(Enseignant, null=True, default=None) class Meta: ordering = ('code',) def __str__(self): - return '{0} - {1}'.format(self.code, self.libelle) + return '{0} - {1}'.format(self.code, self.nom) def url(self): return "{1}".format(self.id, self.__str__()) @@ -67,7 +67,7 @@ class Domaine(models.Model): class Processus(models.Model): code = models.CharField(max_length=20, blank=True) - libelle = models.CharField(max_length=200, blank=False) + nom = models.CharField(max_length=200, blank=False) domaine = models.ForeignKey(Domaine, null=False) description = models.TextField(default='') @@ -77,7 +77,7 @@ class Processus(models.Model): verbose_name_plural = 'processus' def __str__(self): - return '{0} - {1}'.format(self.code, self.libelle) + return '{0} - {1}'.format(self.code, self.nom) def url(self): return "{1}".format(self.id, self.__str__()) @@ -87,17 +87,15 @@ class Module(models.Model): code = models.CharField(max_length=10, blank=False, default='Code') nom = models.CharField(max_length=100, blank=False, default='Nom du module') - description = models.TextField() type = models.CharField(max_length=20, choices= CHOIX_TYPE_MODULE) - competences = models.ManyToManyField('Competence') situation = models.TextField() evaluation = models.TextField() contenu = models.TextField() periode_presentiel = models.IntegerField() travail_perso = models.IntegerField() pratique_prof = models.IntegerField(default=0) - didactique = models.TextField(default='') - evaluation = models.TextField(default='') + didactique = models.TextField() + evaluation = models.TextField() sem1 = models.IntegerField(default=0) sem2 = models.IntegerField(default=0) sem3 = models.IntegerField(default=0) @@ -124,22 +122,22 @@ class Module(models.Model): class Competence(models.Model): code = models.CharField(max_length=20, blank=True) - libelle = models.CharField(max_length=250, blank=False) + nom = models.CharField(max_length=250, blank=False) type = models.CharField(max_length=35, blank=True, default='') - processus = models.ForeignKey(Processus, null=True, default=None) + module = models.ForeignKey(Module, null=True, default=None) class Meta: ordering = ('code',) verbose_name = 'compétence' def __str__(self): - return '{0} - {1}'.format(self.code, self.libelle) + return '{0} - {1}'.format(self.code, self.nom) class SousCompetence(models.Model): code = models.CharField(max_length=20, blank=True) - libelle = models.CharField(max_length=250, blank=False) + nom = models.CharField(max_length=250, blank=False) competence = models.ForeignKey(Competence, null=False) class Meta: @@ -147,23 +145,23 @@ class SousCompetence(models.Model): verbose_name = 'sous-compétence' def __str__(self): - return '{0} - {1}'.format(self.code, self.libelle) + return '{0} - {1}'.format(self.code, self.nom) class Ressource(models.Model): - libelle = models.CharField(max_length=200, blank=False) + 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) def __str__(self): - return '{0}'.format(self.libelle) + return '{0}'.format(self.nom) class Objectif(models.Model): - libelle = models.CharField(max_length=200, blank=False) + nom = models.CharField(max_length=200, blank=False) module=models.ForeignKey(Module, null=True, default=None) def __str__(self): - return '{0}'.format(self.libelle) + return '{0}'.format(self.nom) class Document(models.Model): @@ -173,19 +171,23 @@ class Document(models.Model): class PDFResponse(HttpResponse): - def __init__(self, filename, title=''): + 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.gif', width=350, height=40) + image = Image(settings.MEDIA_ROOT + '/media/header.png', width=499, height=99) image.hAlign = 0 + self.story.append(image) self.story.append(Spacer(0,1*cm)) data = [['Filières EDS', title]] - t = Table(data, colWidths=[8*cm,8*cm]) + 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), @@ -194,21 +196,24 @@ class PDFResponse(HttpResponse): t.hAlign = 0 self.story.append(t) + class MyDocTemplate(SimpleDocTemplate): def __init__(self, name): - - #BaseDocTemplate.__init__(self,name, pagesize=A4, topMargin=0.5*cm) SimpleDocTemplate.__init__(self, name, pagesize=A4, topMargin=0.5*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.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber())) self.canv.restoreState() @@ -218,12 +223,16 @@ class MyDocTemplateLandscape(SimpleDocTemplate): def __init__(self, name): SimpleDocTemplate.__init__(self, name, pagesize=landscape(A4), topMargin=0.5*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.drawCentredString(self.CENTRE_WIDTH,1*cm,"Page : " + str(self.canv.getPageNumber())) self.canv.restoreState() diff --git a/cms/views.py b/cms/views.py index d156640..9ac0cb0 100644 --- a/cms/views.py +++ b/cms/views.py @@ -48,7 +48,7 @@ class HomwPDFView(TemplateView): def render_to_response(self, context, **response_kwargs): - response = PDFResponse('PlanFormation.pdf' ,'Plan de formation') + response = PDFResponse('PlanFormation.pdf' ,'Plan de formation', portrait=False) d = Domaine.objects.all().order_by('code') p = Processus.objects.all().order_by('code') @@ -181,19 +181,19 @@ class ModulePDF(DetailView): str_comp = '' - for c in m.competences.all(): - str_comp += '- {0} ({1})\n'.format(c.libelle, c.code) + for c in m.competence_set.all(): + str_comp += '- {0} ({1})\n'.format(c.nom, c.code) if self.request.user.is_authenticated: for sc in c.souscompetence_set.all(): - str_comp += ' -- {0}\n'.format(sc.libelle) + str_comp += ' -- {0}\n'.format(sc.nom) str_res = '' for c in m.ressource_set.all(): - str_res += '- {0}\n'.format(c.libelle) + str_res += '- {0}\n'.format(c.nom) str_obj = '' for c in m.objectif_set.all(): - str_obj += '- {0}\n'.format(c.libelle) + str_obj += '- {0}\n'.format(c.nom) lines = m.contenu.split('\n') str_con = '' @@ -211,8 +211,8 @@ class ModulePDF(DetailView): [Preformatted_left('Objectifs à atteindre'), Preformatted_right(str_obj)], [Preformatted_left('Contenu'), Preformatted_right(str_con)], [Preformatted_left('Evaluation'), Preformatted_right(m.evaluation)], - [Preformatted_left('Type'), Preformatted_right(m.type)], - [Preformatted_left('Semestre'), Preformatted_right(m.semestre)], + [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())], @@ -237,7 +237,8 @@ Calcul du nombre de périodes de formation """ def get_context(context): liste = Module.objects.exclude(periode_presentiel = 0) - context['tot'] = liste.aggregate(Sum(F('periode_presentiel'))) + #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) @@ -249,7 +250,10 @@ def get_context(context): 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['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'] + return context @@ -269,30 +273,30 @@ class PeriodePDFView(TemplateView): response = PDFResponse('Périodes.pdf' ,'Périodes de formation') context = get_context(context) - data = [['Semestre 1', '{0} h.'.format(context['tot1']['sem1__sum']),'', 'Semestre 2', '{0} h.'.format(context['tot2']['sem2__sum'])], + 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['sem1'][6], '{0} h.'.format(context['sem1'][6].sem1),'', '','' ], + [context['sem1'][5], '{0} h.'.format(context['sem1'][5].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) ], - ['','', '',context['sem4'][6], '{0} h.'.format(context['sem4'][6].sem4) ], + [context['sem3'][5], '{0} h.'.format(context['sem3'][5].sem3),'', '' ], + ['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),'', '','' ], + [context['sem5'][4], '{0} h.'.format(context['sem5'][4].sem5),'', '', '' ], + [context['sem5'][5], '{0} h.'.format(context['sem5'][5].sem5),'', '', '' ], ] t = Table(data, colWidths=[6.5*cm,1*cm, 1*cm, 6.5*cm, 1*cm], spaceBefore=2*cm, spaceAfter=1.5*cm) @@ -305,18 +309,21 @@ class PeriodePDFView(TemplateView): ('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,16), (-1,16), 15), - ('LINEBELOW', (0,16), (1,16), 1, colors.black), - ('LINEBELOW', (3,16), (-1,16), 1, colors.black), + ('TOPPADDING', (0,7), (-1,7), 15), + ('LINEBELOW', (0,7), (1,7), 1, colors.black), + ('LINEBELOW', (3,7), (-1,7), 1, colors.black), + ('TOPPADDING', (0,14), (-1,14), 15), + ('LINEBELOW', (0,14), (1,14), 1, colors.black), + ('LINEBELOW', (3,14), (-1,14), 1, colors.black), + ('FONT', (0, 0), (-1, 0), 'Helvetica-Bold'), + ('FONT', (0, 7), (-1, 7), 'Helvetica-Bold'), + ('FONT', (0, 14), (-1, 14), 'Helvetica-Bold'), ])) t.hAlign = 0 response.story.append(t) - response.story.append(Paragraph('Total des heures de cours: {0} h.'.format(context['tot']['periode_presentiel__sum']), style_normal)) + response.story.append(Paragraph('Total des heures de cours: {0} h.'.format(context['tot']), style_normal)) doc = MyDocTemplate(response) doc.build(response.story) @@ -349,5 +356,25 @@ def pdf_view(request): response = HttpResponse(pdf.read().decode('latin-1') , content_type='application/pdf') response['Content-Disposition'] = 'inline;filename=some_file.pdf' return response - pdf.closed - \ No newline at end of file + pdf.closed + + +def import_xls_file(request): + import xlrd + + if request.method == 'POST': + xlspath = '/home/alzo/Export_CLOEE_FE.xls' + with xlrd.open_workbook(xlspath) as book: + sheet = book.sheet_by_index(0) + print(sheet.ncols) + print(sheet.nrows) + + + if request.method == 'GET': + xlspath = '/home/alzo/Export_CLOEE_FE.xls' + with xlrd.open_workbook(xlspath) as book: + sheet = book.sheet_by_index(0) + for rownum in range(1,sheet.nrows): + print(int(sheet.row_values(rownum)[0])) + + diff --git a/common/settings.py b/common/settings.py index 3205592..35ea039 100644 --- a/common/settings.py +++ b/common/settings.py @@ -115,6 +115,20 @@ STATIC_ROOT = os.path.join(BASE_DIR, 'static/') MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media/') +STUDENT_IMPORT_MAPPING = { + 'Num élève': 'id_ext', + 'Nom élève': 'nom', + 'Prénom élève': 'prenom', + 'Rue élève': 'adresse', + 'Localité élève': 'localite', # pcode is separated from city in prepare_import + 'Tél. élève': 'telephone', + 'Natel élève': 'mobile', + 'Email élève': 'email_rpn', + 'Date nais. élève': 'date_naissance', + 'Classe': 'klasse', + +} + from .local_settings import * diff --git a/common/urls.py b/common/urls.py index af56370..5dbae35 100644 --- a/common/urls.py +++ b/common/urls.py @@ -35,4 +35,5 @@ urlpatterns = [ url(r'^download/(?P.+)$', views.Download, name='download'), url(r'^calendrier/$', views.pdf_view, name='pdf-view'), url(r'^module_pdf/(?P\d+)$', views.ModulePDF.as_view(), name='module-pdf'), + url(r'^import/$', views.import_xls_file), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/media/media/header.png b/media/media/header.png new file mode 100644 index 0000000000000000000000000000000000000000..970532d1c79c85948a3d709a851fcf644633ad3a GIT binary patch literal 95667 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

Ma;oHEbNI} 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 Ncl6YYR3H8M{{UM_*9ZUr literal 0 HcmV?d00001 diff --git a/templates/cms/base_site.html b/templates/cms/base_site.html index e35847e..5664340 100644 --- a/templates/cms/base_site.html +++ b/templates/cms/base_site.html @@ -2,7 +2,7 @@ {% block title %}EDS{% endblock %} -{% block branding %}

Formation en Education sociale ES

{% endblock %} +{% block branding %}

Ecole Santé-social Pierre-Coullery   Formation en Education sociale

{% endblock %} {% block usertools %}
{% if user.is_authenticated %} diff --git a/templates/cms/index.html b/templates/cms/index.html index 118d096..3612673 100644 --- a/templates/cms/index.html +++ b/templates/cms/index.html @@ -79,7 +79,7 @@ {{D6.url|safe}} {{P09.url|safe}} - {{M16_1a.url_code|safe}} / {{M16_1b.url_code|safe}} / {{M16_1c.url_code|safe}} + {{M16_1.url_code|safe}} {{M16_2a.url_code|safe}} / {{M16_2b.url_code|safe}} / {{M16_2c.url_code|safe}} {{M16_3a.url_code|safe}} / {{M16_3b.url_code|safe}} / {{M16_3c.url_code|safe}} diff --git a/templates/cms/module_detail.html b/templates/cms/module_detail.html index 5cb0c60..18bea69 100644 --- a/templates/cms/module_detail.html +++ b/templates/cms/module_detail.html @@ -12,15 +12,15 @@ Processus{{object.processus.url|safe}} Situation emblématique{{object.situation|linebreaksbr}} Compétences visées

L'éducateur social, l'éducatrice sociale:

-{% for c in object.competences.all %}- {{c.libelle}} ({{c.code}})
+{% for c in object.competence_set.all %}- {{c.nom}} ({{c.code}})
{% if user.is_authenticated %} -{% for sc in c.souscompetence_set.all %}    - {{sc.libelle}}
{%endfor %}{% endif %}{% endfor %} +{% for sc in c.souscompetence_set.all %}    -- {{sc.nom}}
{%endfor %}{% endif %}{% endfor %} Ressources à acquérir{% for c in object.ressource_set.all %}- {{c}}
{% endfor %} Objectifs à atteindre{% for c in object.objectif_set.all %}- {{c}}
{% endfor %} Contenu{{object.contenu|linebreaksbr}} Evaluation{{object.evaluation|linebreaksbr}} -Type{{object.type}} -Semestre{{object.semestre}} +Type{{object.type}}, obligatoire +SemestreSem. {{object.semestre}} {% if object.periode_presentiel > 0 %} Présentiel{{object.periode_presentiel}} heures {% endif %} diff --git a/templates/cms/periodes.html b/templates/cms/periodes.html index 7ad341a..3368646 100644 --- a/templates/cms/periodes.html +++ b/templates/cms/periodes.html @@ -50,7 +50,7 @@
-Total des périodes de cours: {{tot.periode_presentiel__sum}} heures +Total des périodes de cours: {{tot}} heures

Imprimer en PDF diff --git a/templates/cms/processus_list.html b/templates/cms/processus_list.html index d3d59fd..691c302 100644 --- a/templates/cms/processus_list.html +++ b/templates/cms/processus_list.html @@ -14,7 +14,7 @@

Liste des processus

{% for p in object_list %} - + {% for m in p.module_set.all %} {% endfor %}
{{p.code}}{{p.libelle}}
{{p.code}}{{p.nom}}
 {{m}}