Upload document
This commit is contained in:
parent
30550d3066
commit
9f0e515f4e
12 changed files with 341 additions and 90 deletions
23
cms/admin.py
23
cms/admin.py
|
|
@ -1,16 +1,21 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from .models import (Enseignant, Domaine, Competence, SousCompetence, Objectif,
|
from .models import (Enseignant, Domaine, Competence, SousCompetence, Objectif,
|
||||||
Ressource, Module, Processus, Document)
|
Ressource, Module, Processus, Document, UploadDoc)
|
||||||
|
|
||||||
from .forms import (ProcessusAdminForm, ProcessusInlineAdminForm, ModuleAdminForm, DomaineAdminForm, CompetenceAdminForm,
|
from .forms import (ProcessusAdminForm, ProcessusInlineAdminForm, ModuleAdminForm, DomaineAdminForm, CompetenceAdminForm,
|
||||||
SousCompetenceInlineAdminForm, CompetenceInlineAdminForm, ObjectifAdminForm, RessourceAdminForm,
|
SousCompetenceInlineAdminForm, CompetenceInlineAdminForm, ObjectifAdminForm, RessourceAdminForm,
|
||||||
SousCompetenceAdminForm, DocumentAdminForm)
|
SousCompetenceAdminForm, DocumentAdminForm, UploadAdminForm )
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
|
||||||
|
|
||||||
class SousCompetenceInline(admin.TabularInline):
|
class SousCompetenceInline(admin.TabularInline):
|
||||||
form = SousCompetenceInlineAdminForm
|
form = SousCompetenceInlineAdminForm
|
||||||
model = SousCompetence
|
model = SousCompetence
|
||||||
extra = 0
|
extra = 0
|
||||||
|
|
||||||
|
|
||||||
class CompetenceInline(admin.TabularInline):
|
class CompetenceInline(admin.TabularInline):
|
||||||
form = CompetenceInlineAdminForm
|
form = CompetenceInlineAdminForm
|
||||||
model = Competence
|
model = Competence
|
||||||
|
|
@ -21,8 +26,6 @@ class SousCompetenceAdmin(admin.ModelAdmin):
|
||||||
form = SousCompetenceAdminForm
|
form = SousCompetenceAdminForm
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RessourceAdmin(admin.ModelAdmin):
|
class RessourceAdmin(admin.ModelAdmin):
|
||||||
form = RessourceAdminForm
|
form = RessourceAdminForm
|
||||||
list_display = ('nom', 'module')
|
list_display = ('nom', 'module')
|
||||||
|
|
@ -60,14 +63,14 @@ class DomaineAdmin(admin.ModelAdmin):
|
||||||
form = DomaineAdminForm
|
form = DomaineAdminForm
|
||||||
inlines = [ProcessusInlineAdmin,]
|
inlines = [ProcessusInlineAdmin,]
|
||||||
|
|
||||||
|
|
||||||
class DocumentAdmin(admin.ModelAdmin):
|
class DocumentAdmin(admin.ModelAdmin):
|
||||||
form = DocumentAdminForm
|
form = DocumentAdminForm
|
||||||
|
|
||||||
class Meta:
|
|
||||||
js = (
|
class UploadAdmin(admin.ModelAdmin):
|
||||||
'/static/js/tiny_mce/tiny_mce.js',
|
form = UploadAdminForm
|
||||||
'/static/js/textarea.js',
|
|
||||||
)
|
|
||||||
|
|
||||||
admin.site.register(Enseignant)
|
admin.site.register(Enseignant)
|
||||||
admin.site.register(Domaine, DomaineAdmin)
|
admin.site.register(Domaine, DomaineAdmin)
|
||||||
|
|
@ -78,3 +81,5 @@ admin.site.register(Ressource, RessourceAdmin)
|
||||||
admin.site.register(Module, ModuleAdmin)
|
admin.site.register(Module, ModuleAdmin)
|
||||||
admin.site.register(Processus, ProcessusAdmin)
|
admin.site.register(Processus, ProcessusAdmin)
|
||||||
admin.site.register(Document, DocumentAdmin)
|
admin.site.register(Document, DocumentAdmin)
|
||||||
|
|
||||||
|
admin.site.register(UploadDoc, UploadAdmin)
|
||||||
|
|
|
||||||
11
cms/forms.py
11
cms/forms.py
|
|
@ -4,7 +4,9 @@ Created on 17 nov. 2012
|
||||||
|
|
||||||
@author: alzo
|
@author: alzo
|
||||||
'''
|
'''
|
||||||
from .models import Processus, Module, Domaine, Competence, SousCompetence, Document
|
from .models import (Processus, Module, Domaine, Competence, SousCompetence, Document,
|
||||||
|
UploadDoc)
|
||||||
|
|
||||||
from django import forms
|
from django import forms
|
||||||
|
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
@ -164,3 +166,10 @@ class ModuleAdminForm(forms.ModelForm):
|
||||||
'evaluation': forms.Textarea(attrs={'cols': 125, 'rows':2}),
|
'evaluation': forms.Textarea(attrs={'cols': 125, 'rows':2}),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class UploadAdminForm(forms.ModelForm):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = UploadDoc
|
||||||
|
fields = ('titre', 'docfile', 'published', )
|
||||||
|
|
||||||
155
cms/migrations/0001_initial.py
Normal file
155
cms/migrations/0001_initial.py
Normal file
|
|
@ -0,0 +1,155 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.4 on 2017-04-19 11:32
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import tinymce.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Competence',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.CharField(blank=True, max_length=20)),
|
||||||
|
('nom', models.CharField(max_length=250)),
|
||||||
|
('type', models.CharField(blank=True, default='', max_length=35)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'compétence',
|
||||||
|
'ordering': ('code',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Document',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('docfile', models.FileField(upload_to='media/')),
|
||||||
|
('titre', models.CharField(blank=True, max_length=128)),
|
||||||
|
('texte', tinymce.models.HTMLField(blank=True)),
|
||||||
|
('published', models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Domaine',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.CharField(blank=True, max_length=20)),
|
||||||
|
('nom', models.CharField(max_length=200)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ('code',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Enseignant',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('sigle', models.CharField(blank=True, default='', max_length=5)),
|
||||||
|
('nom', models.CharField(blank=True, default='', max_length=20)),
|
||||||
|
('prenom', models.CharField(blank=True, default='', max_length=20)),
|
||||||
|
('email', models.EmailField(blank=True, default='', max_length=254)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ('nom',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Module',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.CharField(default='Code', max_length=10)),
|
||||||
|
('nom', models.CharField(default='Nom du module', max_length=100)),
|
||||||
|
('type', models.CharField(choices=[('Spécifique', 'spécifique'), ('Transversal', 'transversal')], max_length=20)),
|
||||||
|
('situation', models.TextField()),
|
||||||
|
('contenu', models.TextField()),
|
||||||
|
('periode_presentiel', models.IntegerField(verbose_name='Période en présentiel')),
|
||||||
|
('travail_perso', models.IntegerField(verbose_name='Travail personnel')),
|
||||||
|
('pratique_prof', models.IntegerField(default=0, verbose_name='Pratique professionnelle')),
|
||||||
|
('didactique', models.TextField()),
|
||||||
|
('evaluation', models.TextField()),
|
||||||
|
('sem1', models.IntegerField(default=0)),
|
||||||
|
('sem2', models.IntegerField(default=0)),
|
||||||
|
('sem3', models.IntegerField(default=0)),
|
||||||
|
('sem4', models.IntegerField(default=0)),
|
||||||
|
('sem5', models.IntegerField(default=0)),
|
||||||
|
('sem6', models.IntegerField(default=0)),
|
||||||
|
('semestre', models.CharField(default='', max_length=15)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'ordering': ('code',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Objectif',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('nom', models.CharField(max_length=200)),
|
||||||
|
('module', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='cms.Module')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Processus',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.CharField(blank=True, max_length=20)),
|
||||||
|
('nom', models.CharField(max_length=200)),
|
||||||
|
('description', models.TextField(default='')),
|
||||||
|
('domaine', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cms.Domaine')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name_plural': 'processus',
|
||||||
|
'ordering': ('code',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Ressource',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('nom', models.CharField(max_length=200)),
|
||||||
|
('type', models.CharField(choices=[('Savoir', 'savoir'), ('Savoir méthodologique', 'savoir méthodologique'), ('Savoir relationnel', 'savoir relationnel')], default='Savoir', max_length=30)),
|
||||||
|
('module', models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='cms.Module')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='SousCompetence',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('code', models.CharField(blank=True, max_length=20)),
|
||||||
|
('nom', models.CharField(max_length=250)),
|
||||||
|
('competence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cms.Competence')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'sous-compétence',
|
||||||
|
'ordering': ('code',),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='module',
|
||||||
|
name='processus',
|
||||||
|
field=models.ForeignKey(default=None, on_delete=django.db.models.deletion.CASCADE, to='cms.Processus'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='domaine',
|
||||||
|
name='responsable',
|
||||||
|
field=models.ForeignKey(default=None, null=True, on_delete=django.db.models.deletion.CASCADE, to='cms.Enseignant'),
|
||||||
|
),
|
||||||
|
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.AddField(
|
||||||
|
model_name='competence',
|
||||||
|
name='proces_eval',
|
||||||
|
field=models.ForeignKey(default=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='cms.Processus'),
|
||||||
|
),
|
||||||
|
]
|
||||||
28
cms/migrations/0002_auto_20170419_1333.py
Normal file
28
cms/migrations/0002_auto_20170419_1333.py
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.4 on 2017-04-19 11:33
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cms', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Upload',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('docfile', models.FileField(upload_to='doc/')),
|
||||||
|
('titre', models.CharField(max_length=100)),
|
||||||
|
('published', models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='document',
|
||||||
|
name='docfile',
|
||||||
|
),
|
||||||
|
]
|
||||||
19
cms/migrations/0003_auto_20170419_1409.py
Normal file
19
cms/migrations/0003_auto_20170419_1409.py
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by Django 1.10.4 on 2017-04-19 12:09
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('cms', '0002_auto_20170419_1333'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.RenameModel(
|
||||||
|
old_name='Upload',
|
||||||
|
new_name='UploadDoc',
|
||||||
|
),
|
||||||
|
]
|
||||||
0
cms/migrations/__init__.py
Normal file
0
cms/migrations/__init__.py
Normal file
|
|
@ -16,6 +16,7 @@ from reportlab.lib.units import cm
|
||||||
from reportlab.lib.enums import TA_LEFT, TA_CENTER
|
from reportlab.lib.enums import TA_LEFT, TA_CENTER
|
||||||
from reportlab.lib import colors
|
from reportlab.lib import colors
|
||||||
from reportlab.lib.styles import ParagraphStyle as PS
|
from reportlab.lib.styles import ParagraphStyle as PS
|
||||||
|
|
||||||
style_8_c = PS(name='CORPS', fontName='Helvetica', fontSize=6, alignment = TA_CENTER)
|
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_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_bold = PS(name='CORPS', fontName='Helvetica-Bold', fontSize=10, alignment = TA_LEFT)
|
||||||
|
|
@ -35,14 +36,15 @@ CHOIX_TYPE_MODULE = (
|
||||||
)
|
)
|
||||||
|
|
||||||
class Enseignant(models.Model):
|
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='')
|
nom = models.CharField(max_length=20, blank=True, default='')
|
||||||
prenom = models.CharField(max_length=20, blank=True, default='')
|
prenom = models.CharField(max_length=20, blank=True, default='')
|
||||||
email = models.EmailField(blank=True, default='')
|
email = models.EmailField(blank=True, default='')
|
||||||
|
|
||||||
class Meta:
|
|
||||||
ordering =('nom',)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0} {1}'.format(self.nom, self.prenom)
|
return '{0} {1}'.format(self.nom, self.prenom)
|
||||||
|
|
||||||
|
|
@ -54,14 +56,15 @@ class Enseignant(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Domaine(models.Model):
|
class Domaine(models.Model):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ('code',)
|
||||||
|
|
||||||
code = models.CharField(max_length=20, blank=True)
|
code = models.CharField(max_length=20, blank=True)
|
||||||
nom = models.CharField(max_length=200, blank=False)
|
nom = models.CharField(max_length=200, blank=False)
|
||||||
responsable = models.ForeignKey(Enseignant, null=True, default=None)
|
responsable = models.ForeignKey(Enseignant, null=True, default=None)
|
||||||
|
|
||||||
height_screen = 50
|
#height_screen = 50
|
||||||
|
|
||||||
class Meta:
|
|
||||||
ordering = ('code',)
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0} - {1}'.format(self.code, self.nom)
|
return '{0} - {1}'.format(self.code, self.nom)
|
||||||
|
|
@ -69,10 +72,9 @@ class Domaine(models.Model):
|
||||||
def url(self):
|
def url(self):
|
||||||
return "<a href='/domaine/{0}'>{1}</a>".format(self.id, self.__str__())
|
return "<a href='/domaine/{0}'>{1}</a>".format(self.id, self.__str__())
|
||||||
|
|
||||||
|
"""
|
||||||
def svg(self):
|
def svg(self):
|
||||||
processus = self.processus_set.all()
|
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" />'
|
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>'
|
txt = '<text x="25" y="{0}" style="stroke:#000000;font-size:10;">{1}</text>'
|
||||||
height_frame = processus.count()* self.height_screen
|
height_frame = processus.count()* self.height_screen
|
||||||
|
|
@ -86,20 +88,20 @@ class Domaine(models.Model):
|
||||||
dic_js['resp'] = self.responsable.nom
|
dic_js['resp'] = self.responsable.nom
|
||||||
|
|
||||||
return '{'
|
return '{'
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Processus(models.Model):
|
class Processus(models.Model):
|
||||||
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:
|
class Meta:
|
||||||
ordering = ('code',)
|
ordering = ('code',)
|
||||||
verbose_name_plural = 'processus'
|
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='')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0} - {1}'.format(self.code, self.nom)
|
return '{0} - {1}'.format(self.code, self.nom)
|
||||||
|
|
||||||
|
|
@ -109,6 +111,9 @@ class Processus(models.Model):
|
||||||
|
|
||||||
class Module(models.Model):
|
class Module(models.Model):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ('code',)
|
||||||
|
|
||||||
code = models.CharField(max_length=10, blank=False, default='Code')
|
code = models.CharField(max_length=10, blank=False, default='Code')
|
||||||
nom = models.CharField(max_length=100, blank=False, default='Nom du module')
|
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)
|
||||||
|
|
@ -129,11 +134,6 @@ class Module(models.Model):
|
||||||
semestre = models.CharField(max_length=15, default='', blank=False)
|
semestre = models.CharField(max_length=15, default='', blank=False)
|
||||||
processus = models.ForeignKey(Processus, null=False, default=None)
|
processus = models.ForeignKey(Processus, null=False, default=None)
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
ordering = ('code',)
|
|
||||||
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0} - {1}'.format(self.code, self.nom)
|
return '{0} - {1}'.format(self.code, self.nom)
|
||||||
|
|
||||||
|
|
@ -145,6 +145,11 @@ class Module(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Competence(models.Model):
|
class Competence(models.Model):
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ('code',)
|
||||||
|
verbose_name = 'compétence'
|
||||||
|
|
||||||
code = models.CharField(max_length=20, blank=True)
|
code = models.CharField(max_length=20, blank=True)
|
||||||
nom = models.CharField(max_length=250, blank=False)
|
nom = models.CharField(max_length=250, blank=False)
|
||||||
type = models.CharField(max_length=35, blank=True, default='')
|
type = models.CharField(max_length=35, blank=True, default='')
|
||||||
|
|
@ -152,29 +157,26 @@ class Competence(models.Model):
|
||||||
proces_eval = models.ForeignKey(Processus, null=True, default=True)
|
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):
|
def __str__(self):
|
||||||
return '{0} - {1}'.format(self.code, self.nom)
|
return '{0} - {1}'.format(self.code, self.nom)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SousCompetence(models.Model):
|
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:
|
class Meta:
|
||||||
ordering = ('code',)
|
ordering = ('code',)
|
||||||
verbose_name = 'sous-compétence'
|
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):
|
def __str__(self):
|
||||||
return '{0} - {1}'.format(self.code, self.nom)
|
return '{0} - {1}'.format(self.code, self.nom)
|
||||||
|
|
||||||
|
|
||||||
class Ressource(models.Model):
|
class Ressource(models.Model):
|
||||||
|
|
||||||
nom = 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')
|
type = models.CharField(max_length=30, choices = CHOIX_TYPE_SAVOIR, default='Savoir')
|
||||||
module=models.ForeignKey(Module, null=True, default=None)
|
module=models.ForeignKey(Module, null=True, default=None)
|
||||||
|
|
@ -182,7 +184,9 @@ class Ressource(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{0}'.format(self.nom)
|
return '{0}'.format(self.nom)
|
||||||
|
|
||||||
|
|
||||||
class Objectif(models.Model):
|
class Objectif(models.Model):
|
||||||
|
|
||||||
nom = models.CharField(max_length=200, blank=False)
|
nom = models.CharField(max_length=200, blank=False)
|
||||||
module=models.ForeignKey(Module, null=True, default=None)
|
module=models.ForeignKey(Module, null=True, default=None)
|
||||||
|
|
||||||
|
|
@ -191,7 +195,8 @@ class Objectif(models.Model):
|
||||||
|
|
||||||
|
|
||||||
class Document(models.Model):
|
class Document(models.Model):
|
||||||
docfile = models.FileField(upload_to='media', blank=True)
|
|
||||||
|
#docfile = models.FileField(upload_to='media/')
|
||||||
titre = models.CharField(max_length=128, blank=True)
|
titre = models.CharField(max_length=128, blank=True)
|
||||||
texte = tinymce_models.HTMLField(blank=True,)
|
texte = tinymce_models.HTMLField(blank=True,)
|
||||||
published = models.BooleanField(default=False)
|
published = models.BooleanField(default=False)
|
||||||
|
|
@ -200,6 +205,14 @@ class Document(models.Model):
|
||||||
return self.titre
|
return self.titre
|
||||||
|
|
||||||
|
|
||||||
|
class UploadDoc(models.Model):
|
||||||
|
|
||||||
|
docfile = models.FileField(upload_to='doc/')
|
||||||
|
titre = models.CharField(max_length=100, blank=False)
|
||||||
|
published = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.titre
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -210,7 +223,7 @@ class PDFResponse(HttpResponse):
|
||||||
self['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
|
self['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
|
||||||
self['Content-Type'] = 'charset=utf-8'
|
self['Content-Type'] = 'charset=utf-8'
|
||||||
self.story = []
|
self.story = []
|
||||||
image = Image(settings.MEDIA_ROOT + '/media/header.png', width=480, height=80)
|
image = Image(settings.MEDIA_ROOT + '/media/header.png', width=520, height=75)
|
||||||
image.hAlign = TA_LEFT
|
image.hAlign = TA_LEFT
|
||||||
|
|
||||||
self.story.append(image)
|
self.story.append(image)
|
||||||
|
|
@ -230,7 +243,6 @@ class PDFResponse(HttpResponse):
|
||||||
self.story.append(t)
|
self.story.append(t)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MyDocTemplate(SimpleDocTemplate):
|
class MyDocTemplate(SimpleDocTemplate):
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
|
@ -241,7 +253,6 @@ class MyDocTemplate(SimpleDocTemplate):
|
||||||
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
|
self.CENTRE_WIDTH = self.PAGE_WIDTH/2.0
|
||||||
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
|
self.CENTRE_HEIGHT = self.PAGE_HEIGHT/2.0
|
||||||
|
|
||||||
|
|
||||||
def beforePage(self):
|
def beforePage(self):
|
||||||
# page number
|
# page number
|
||||||
self.canv.saveState()
|
self.canv.saveState()
|
||||||
|
|
@ -250,7 +261,6 @@ class MyDocTemplate(SimpleDocTemplate):
|
||||||
self.canv.restoreState()
|
self.canv.restoreState()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class MyDocTemplateLandscape(SimpleDocTemplate):
|
class MyDocTemplateLandscape(SimpleDocTemplate):
|
||||||
|
|
||||||
def __init__(self, name):
|
def __init__(self, name):
|
||||||
|
|
@ -270,4 +280,3 @@ class MyDocTemplateLandscape(SimpleDocTemplate):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
40
cms/views.py
40
cms/views.py
|
|
@ -1,4 +1,3 @@
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
'''
|
'''
|
||||||
Created on 4 déc. 2012
|
Created on 4 déc. 2012
|
||||||
|
|
||||||
|
|
@ -7,7 +6,8 @@ Created on 4 déc. 2012
|
||||||
import os
|
import os
|
||||||
from django.shortcuts import render, render_to_response
|
from django.shortcuts import render, render_to_response
|
||||||
from django.views.generic import ListView, TemplateView, DetailView
|
from django.views.generic import ListView, TemplateView, DetailView
|
||||||
from .models import Domaine, Processus, Module, Competence, Document, PDFResponse, MyDocTemplate, MyDocTemplateLandscape
|
from .models import (Domaine, Processus, Module, Competence, Document, UploadDoc,
|
||||||
|
PDFResponse, MyDocTemplate, MyDocTemplateLandscape)
|
||||||
from .models import style_normal, style_bold, style_title
|
from .models import style_normal, style_bold, style_title
|
||||||
from django.db.models import F, Sum
|
from django.db.models import F, Sum
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
@ -172,37 +172,35 @@ class DocumentListView(ListView):
|
||||||
template_name = 'cms/document_list.html'
|
template_name = 'cms/document_list.html'
|
||||||
model = Document
|
model = Document
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
context = super(DocumentListView, self).get_context_data(**kwargs)
|
||||||
|
context['upload'] = UploadDoc.objects.filter(published=True)
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class DocumentDetailView(DetailView):
|
class DocumentDetailView(DetailView):
|
||||||
template_name ='cms/document_detail.html'
|
template_name ='cms/document_detail.html'
|
||||||
model = Document
|
model = Document
|
||||||
|
|
||||||
|
|
||||||
def pdf_view(request):
|
class UploadDetailView(DetailView):
|
||||||
with open('/path/to/my/file.pdf', 'r') as pdf:
|
template_name = 'cms/upload_detail.html'
|
||||||
response = HttpResponse(pdf.read(), mimetype='application/pdf')
|
model = UploadDoc
|
||||||
response['Content-Disposition'] = 'inline;filename=some_file.pdf'
|
|
||||||
return response
|
def get_context_data(self, **kwargs):
|
||||||
pdf.closed
|
context = super(UploadDetailView, self).get_context_data(**kwargs)
|
||||||
|
context['fichier'] = self.get_object().docfile.url
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
class ModulePDF(DetailView):
|
class ModulePDF(DetailView):
|
||||||
|
|
||||||
template_name = 'cms/module_detail.html'
|
template_name = 'cms/module_detail.html'
|
||||||
model = Module
|
model = Module
|
||||||
|
|
||||||
def get_object(self):
|
|
||||||
# Call the superclass
|
|
||||||
return super(ModulePDF, self).get_object()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def render_to_response(self, context, **response_kwargs):
|
def render_to_response(self, context, **response_kwargs):
|
||||||
#return DetailView.render_to_response(self, context, **response_kwargs)
|
|
||||||
m = self.get_object()
|
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 = ''
|
str_comp = ''
|
||||||
for c in m.competence_set.all():
|
for c in m.competence_set.all():
|
||||||
str_comp += '- {0} ({1})\n'.format(c.nom, c.code)
|
str_comp += '- {0} ({1})\n'.format(c.nom, c.code)
|
||||||
|
|
@ -249,16 +247,16 @@ class ModulePDF(DetailView):
|
||||||
response.story.append(Spacer(0,1*cm))
|
response.story.append(Spacer(0,1*cm))
|
||||||
response.story.append(t)
|
response.story.append(t)
|
||||||
|
|
||||||
|
|
||||||
doc = MyDocTemplate(response)
|
doc = MyDocTemplate(response)
|
||||||
doc.build(response.story)
|
doc.build(response.story)
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
def get_context(context):
|
||||||
"""
|
"""
|
||||||
Calcul du nombre de périodes de formation
|
Calcul du nombre de périodes de formation
|
||||||
"""
|
"""
|
||||||
def get_context(context):
|
|
||||||
liste = Module.objects.exclude(periode_presentiel = 0)
|
liste = Module.objects.exclude(periode_presentiel = 0)
|
||||||
#context['tot'] = liste.aggregate(Sum(F('periode_presentiel')))
|
#context['tot'] = liste.aggregate(Sum(F('periode_presentiel')))
|
||||||
|
|
||||||
|
|
@ -355,7 +353,7 @@ class PeriodePDFView(TemplateView):
|
||||||
|
|
||||||
return response
|
return response
|
||||||
|
|
||||||
|
"""
|
||||||
class AddDocument(TemplateView):
|
class AddDocument(TemplateView):
|
||||||
template_name = 'cms/upload.html'
|
template_name = 'cms/upload.html'
|
||||||
|
|
||||||
|
|
@ -402,5 +400,5 @@ def pdf_view(request):
|
||||||
response['Content-Disposition'] = 'inline;filename=some_file.pdf'
|
response['Content-Disposition'] = 'inline;filename=some_file.pdf'
|
||||||
return response
|
return response
|
||||||
pdf.closed
|
pdf.closed
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
@ -32,11 +32,12 @@ urlpatterns = [
|
||||||
url(r'^periodes$', views.PeriodeView.as_view(), name='periodes'),
|
url(r'^periodes$', views.PeriodeView.as_view(), name='periodes'),
|
||||||
url(r'^periodes_pdf$', views.PeriodePDFView.as_view(), name='periodes-pdf'),
|
url(r'^periodes_pdf$', views.PeriodePDFView.as_view(), name='periodes-pdf'),
|
||||||
url(r'^evaluation/$', views.EvaluationView.as_view(), name='evaluation'),
|
url(r'^evaluation/$', views.EvaluationView.as_view(), name='evaluation'),
|
||||||
url(r'^upload/$', views.AddDocument.as_view(), name='upload'),
|
#url(r'^upload/$', views.AddDocument.as_view(), name='upload'),
|
||||||
url(r'^download/(?P<file_name>.+)$', views.Download, name='download'),
|
#url(r'^download/(?P<file_name>.+)$', views.Download, name='download'),
|
||||||
url(r'^calendrier/$', views.pdf_view, name='pdf-view'),
|
#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'^module_pdf/(?P<pk>\d+)$', views.ModulePDF.as_view(), name='module-pdf'),
|
||||||
url(r'^documents/$', views.DocumentListView.as_view(), name='document-list'),
|
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'^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'^tinymce/', include('tinymce.urls'), name='tinymce-js'),
|
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)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,6 @@
|
||||||
<!-- <li><a href="{% url 'evaluation' %}">Evaluation</a> </li> -->
|
<!-- <li><a href="{% url 'evaluation' %}">Evaluation</a> </li> -->
|
||||||
|
|
||||||
<li><a href="{% url 'document-list' %}">Documents</a> </li>
|
<li><a href="{% url 'document-list' %}">Documents</a> </li>
|
||||||
<!-- <li><a href="{% url 'pdf-view' %}">Calendrier</a> </li>-->
|
|
||||||
{% if has_permission %}
|
{% if has_permission %}
|
||||||
<li><a href="#">Calendrier</a> </li>
|
<li><a href="#">Calendrier</a> </li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
||||||
|
|
@ -20,10 +20,22 @@
|
||||||
{% else %}
|
{% else %}
|
||||||
<li>{{doc}} (en travail)</li>
|
<li>{{doc}} (en travail)</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li>Aucun document disponible</li>
|
<li>Aucun document disponible</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for fic in upload %}
|
||||||
|
|
||||||
|
{% if fic.published %}
|
||||||
|
<li><a href="{% url 'upload-detail' fic.id %}">{{fic.titre}}</a></li>
|
||||||
|
{% else %}
|
||||||
|
<li>{{fic}} (en travail)</li>
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
16
templates/cms/upload_detail.html
Normal file
16
templates/cms/upload_detail.html
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends "./base_site.html" %}
|
||||||
|
{% load i18n static %}
|
||||||
|
|
||||||
|
{% block coltype %}colMS{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div id="content-main">
|
||||||
|
<iframe src="{{fichier}}" width="1200" height="800" align="middle"></iframe>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue