]> git.parisson.com Git - teleforma.git/commitdiff
working form but wrong action, add styles
authoryomguy <yomguy@parisson.com>
Wed, 19 Dec 2012 21:58:50 +0000 (22:58 +0100)
committeryomguy <yomguy@parisson.com>
Wed, 19 Dec 2012 21:58:50 +0000 (22:58 +0100)
setup.py
teleforma/models/pro.py
teleforma/static/teleforma/css/teleforma.css
teleforma/templates/teleforma/seminar_detail.html
teleforma/urls.py
teleforma/views/core.py
teleforma/views/pro.py

index c9e06c9f8daa1757cdd19c01d73a84646d2267f2..7548e3ad75cfb7922bdcfd818683ae02053e0e0e 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,7 @@ setup(
         'django-timezones',
         'django-tinymce',
         'django-forms-builder',
+        'xhtml2pdf',
   ],
   platforms=['OS Independent'],
   license='CeCILL v2',
index 2fe3a0bffbb896c92101e41920071777ed755332..8d41d800b9813d7f4dfc6bae324a5804872dd04f 100644 (file)
@@ -250,5 +250,3 @@ class Auditor(models.Model):
         verbose_name = _('Auditor')
         ordering = ['user__last_name']
 
-
-    
index affe27efd4845b323cfc6e1a8664dbd39e59d73f..790dd78523881a7b55714e6e3e67287332f17db7 100644 (file)
@@ -1771,4 +1771,45 @@ form .exceed{
     font: 1em Verdana, sans-serif;
     line-height: 1.3em;
     color: #333;   
-}
\ No newline at end of file
+}
+
+
+.form p {
+    margin: 0em;
+    padding-top: 0.3em;
+    padding-left: 1em;
+    /*border-top: 1px solid #dfdfdf;*/
+}
+
+.form ul, .form ul ul, .form ol {
+    list-style: square;
+    padding: 0em;
+    margin-top: 0em;
+    margin-left: 2em;
+    padding-left: 2em;
+    font-size: 0.8em;
+    clear: both;
+}
+
+.form ul ul {
+    font-size: 1.1em;
+    padding-left: 0;
+}
+
+.form li {
+    font-size: 1.2em;
+    padding: .2em;
+    padding-left: 1em;
+    padding-top: 0.3em;
+    list-style:none; 
+}
+
+.form-button {
+    padding: 1em 0em 1em 1em;
+}
+
+.form h5 {
+    font-size: 1em;
+    padding-left: 0;
+    font-weight: none;
+}
index 3caef4a11cb8f642cec236f0c19fc1c7297bd337..64e96592486081d3c935493b5f2201bc42f06fed 100644 (file)
@@ -123,6 +123,7 @@ $(function() {
           {% endwith %}
 
          {% if validated %}
+          
           {% with seminar.docs_correct as docs %}
            {% if docs.all.count > 1 %}
             {% with _("Step 5 : read these corrected documents") as title %}
@@ -134,6 +135,13 @@ $(function() {
             {% endwith %}
            {% endif %}
           {% endwith %}
+
+          {% with seminar.form as form %}
+           {% with _("Step 6 : evaluate the seminar") as title %}
+            {% include "teleforma/inc/evaluation_form.html" %}
+           {% endwith %}
+          {% endwith %}
+
          {% endif %}
 
       {% endblock course_content %}
index 540d2f0f30bc522cf494d8a436bd42c634dc42f2..eb6e1c85db32f302a5b1c65454cd65a7213f3cbc 100644 (file)
@@ -64,7 +64,7 @@ urlpatterns = patterns('',
     # Desk
     url(r'^desk/$', SeminarsView.as_view(), name="teleforma-desk"),
     url(r'^desk/courses/(?P<pk>.*)/$', CourseView.as_view(), name="teleforma-course-detail"),
-    url(r'^desk/seminars/(?P<pk>.*)/$', SeminarView.as_view(), name="teleforma-seminar-detail"),
+    url(r'^desk/seminars/(?P<pk>.*)/detail/$', SeminarView.as_view(), name="teleforma-seminar-detail"),
 
     url(r'^desk/medias/(?P<pk>.*)/detail/$', MediaView.as_view(), name="teleforma-media-detail"),
     url(r'^desk/medias/(?P<pk>.*)/download/$', media.download, name="teleforma-media-download"),
@@ -101,6 +101,7 @@ urlpatterns = patterns('',
 
     # Evaluations
     url(r'^forms/', include('forms_builder.forms.urls')),
+    url(r'^desk/seminars/(?P<pk>.*)/form/$', EvaluationView.as_view(), name="teleforma-seminar-form"),
 
     # Postman
     url(r'^messages/', include('postman.urls')),
index fec6bc897a5363878d8ba8863a03e22a5e4b16f8..896aebc1a719edac79ee8ffe027e9d44ce074a73 100644 (file)
@@ -38,6 +38,8 @@ import random
 import urllib
 import urllib2
 import json
+import os
+import StringIO
 
 from jsonrpc import jsonrpc_method
 
@@ -47,7 +49,7 @@ from django.template import RequestContext, loader
 from django import template
 from django.http import HttpResponse, HttpResponseRedirect
 from django.http import Http404
-from django.shortcuts import render_to_response, redirect, get_object_or_404
+from django.shortcuts import render_to_response, redirect, get_object_or_404, render
 from django.views.generic import *
 from django.views.generic.base import *
 from django.conf import settings
@@ -67,6 +69,10 @@ from django.contrib.auth.decorators import login_required
 from django.contrib.contenttypes.models import ContentType
 from django.views.generic.edit import FormView
 from django.core.urlresolvers import reverse, reverse_lazy
+from django.template.loader import get_template
+from django.template.context import Context
+from django.utils.html import escape
+
 from jsonrpc.proxy import ServiceProxy
 
 from teleforma.models import *
@@ -75,6 +81,7 @@ from teleforma.views.pro import *
 from telemeta.views import *
 import jqchat.models
 from xlwt import Workbook
+from xhtml2pdf import pisa
 
 try:
     from telecaster.models import *
index c23f81ed69a837bf4d5dfd0f7615fd6af9f03275..bf60d9959499591fdf29b0f90e12f3b5f0813266 100644 (file)
@@ -132,6 +132,7 @@ class SeminarView(DetailView):
         context['seminar_progress'] = seminar_progress(self.request.user, seminar)
         context['total_progress'] = total_progress(self.request.user)
         context['validated'] = seminar_validated(self.request.user, seminar)
+        context['evaluation'] = seminar.form
         return context
 
 
@@ -155,34 +156,6 @@ class SeminarsView(ListView):
         return super(SeminarsView, self).dispatch(*args, **kwargs)
 
 
-
-
-class AjaxableResponseMixin(object):
-    """
-    Mixin to add AJAX support to a form.
-    Must be used with an object-based FormView (e.g. CreateView)
-    """
-    def render_to_json_response(self, context, **response_kwargs):
-        data = json.dumps(context)
-        response_kwargs['content_type'] = 'application/json'
-        return HttpResponse(data, **response_kwargs)
-
-    def form_invalid(self, form):
-        if self.request.is_ajax():
-            return self.render_to_json_response(form.errors, status=400)
-        else:
-            return super(AjaxableResponseMixin, self).form_invalid(form)
-
-    def form_valid(self, form):
-        if self.request.is_ajax():
-            data = {
-                'pk': form.instance.pk,
-            }
-            return self.render_to_json_response(data)
-        else:
-            return super(AjaxableResponseMixin, self).form_valid(form)
-
-
 class AnswerView(FormView):
 
     model = Answer
@@ -341,3 +314,98 @@ class AnswerDetailView(DetailView):
         context['all_seminars'] = get_seminars(self.request.user)
         return context
 
+
+class AjaxableResponseMixin(object):
+    """
+    Mixin to add AJAX support to a form.
+    Must be used with an object-based FormView (e.g. CreateView)
+    """
+    def render_to_json_response(self, context, **response_kwargs):
+        data = json.dumps(context)
+        response_kwargs['content_type'] = 'application/json'
+        return HttpResponse(data, **response_kwargs)
+
+    def form_invalid(self, form):
+        if self.request.is_ajax():
+            return self.render_to_json_response(form.errors, status=400)
+        else:
+            return super(AjaxableResponseMixin, self).form_invalid(form)
+
+    def form_valid(self, form):
+        if self.request.is_ajax():
+            data = {
+                'pk': form.instance.pk,
+            }
+            return self.render_to_json_response(data)
+        else:
+            return super(AjaxableResponseMixin, self).form_valid(form)
+
+
+
+class EvaluationView(DetailView):
+
+    model = Seminar
+    template_name='teleforma/evaluation_form.html'
+
+    def get_context_data(self, **kwargs):
+        context = super(EvaluationView, self).get_context_data(**kwargs)
+        context['all_seminars'] = get_seminars(self.request.user)
+        context['total_progress'] = total_progress(self.request.user)
+        context['form'] = self.get_object().form
+        context['seminar_progress'] = seminar_progress(self.request.user, self.get_object())
+        return context
+
+
+def fetch_resources(uri, rel):
+    """
+    Callback to allow xhtml2pdf/reportlab to retrieve Images,Stylesheets, etc.
+    `uri` is the href attribute from the html link element.
+    `rel` gives a relative path, but it's not used here.
+
+    """
+    if uri.startswith(settings.MEDIA_URL):
+        path = os.path.join(settings.MEDIA_ROOT,
+                            uri.replace(settings.MEDIA_URL, ""))
+    elif uri.startswith(settings.STATIC_URL):
+        path = os.path.join(settings.STATIC_ROOT,
+                            uri.replace(settings.STATIC_URL, ""))
+    else:
+        path = os.path.join(settings.STATIC_ROOT,
+                            uri.replace(settings.STATIC_URL, ""))
+
+        if not os.path.isfile(path):
+            path = os.path.join(settings.MEDIA_ROOT,
+                                uri.replace(settings.MEDIA_URL, ""))
+
+            if not os.path.isfile(path):
+                raise UnsupportedMediaPathException(
+                                    'media urls must start with %s or %s' % (
+                                    settings.MEDIA_ROOT, settings.STATIC_ROOT))
+
+    return path
+
+
+def render_to_pdf(template_src, context_dict):
+    """Function to render html template into a pdf file"""
+    template = get_template(template_src)
+    context = Context(context_dict)
+    html = template.render(context)
+    result = StringIO.StringIO()
+
+    pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")),
+                                            dest=result,
+                                            encoding='UTF-8',
+                                            link_callback=fetch_resources)
+    if not pdf.err:
+        response = HttpResponse(result.getvalue(),
+                                                    mimetype='application/pdf')
+
+        return response
+
+    return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
+
+
+def download_pdf(request):
+    """Build briefing packages format and export as HTML and PDF."""
+    response = HttpResponse(content_type='application/pdf')
+    return generate_pdf('app/test.html', file_object=response)
\ No newline at end of file