← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-addons/addons-training-extra-report-move-ysa into lp:~openobject-training/openobject-addons/training

 

Yogesh(Open ERP) has proposed merging lp:~openerp-dev/openobject-addons/addons-training-extra-report-move-ysa into lp:~openobject-training/openobject-addons/training.

Requested reviews:
  Bhumika (OpenERP) (sbh-openerp)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-addons/addons-training-extra-report-move-ysa/+merge/60500

[ADD] add training_extra_report module.
[MOVE] training_* :- Move report file in training_extra_report module which use RadioButton, para-nowrap, spider, barchart, qrBarCode, CheckBox and imageinline tag in rml file.
-- 
https://code.launchpad.net/~openerp-dev/openobject-addons/addons-training-extra-report-move-ysa/+merge/60500
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-addons/addons-training-extra-report-move-ysa.
=== modified file 'portal_training/lecturer/portal.xml'
--- portal_training/lecturer/portal.xml	2011-03-30 07:41:25 +0000
+++ portal_training/lecturer/portal.xml	2011-05-10 12:24:34 +0000
@@ -17,16 +17,6 @@
             groups="training.group_session_manager,training.group_subscription_manager,portal_training.res_group_portal_lecturer,portal_training.res_group_portal_examiner"
             header="True" />
 
-        <report
-            id="training_exam.training_participation_exam_sheet_w_note"
-            model="training.participation"
-            name="training.participation.report.w.notes"
-            string="Original Exam Sheet with Corrector Notes"
-            rml="training_exam/report/exam_sheet.rml"
-            header="False"
-            auto="False"
-            groups="training_exam.group_exam_user,portal_training.res_group_portal_examiner"/>
-
         <report id="training_exam_processing.report_training_scanned_exam_sheet"
 	        name="training.participation.exam.sheet.scanned"
             model="training.participation"
@@ -36,10 +26,5 @@
             auto="False"
 	        groups="training_exam.group_exam_user,portal_training.res_group_portal_examiner"/>
 
-
-        <record model="ir.actions.report.xml" id="training_exam.training_seance_questions_folder">
-            <field name="groups_id" eval="[(3, ref('portal_training.res_group_portal_examiner')),(4, ref('portal_training.res_group_portal_examiner'))]"/>
-        </record>
-
     </data>
 </openerp>

=== modified file 'training_diagnostic/__openerp__.py'
--- training_diagnostic/__openerp__.py	2011-05-10 06:16:49 +0000
+++ training_diagnostic/__openerp__.py	2011-05-10 12:24:34 +0000
@@ -42,7 +42,6 @@
         'training_exam.xml',
         'training.xml',
         'data/training.xml',
-        'data/report.xml',
         'security/ir.model.access.csv',
     ],
     'active' : False,

=== removed directory 'training_diagnostic/report'
=== removed file 'training_diagnostic/report/__init__.py'
--- training_diagnostic/report/__init__.py	2011-02-13 19:23:28 +0000
+++ training_diagnostic/report/__init__.py	1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
-import domain_spiderchart
-import domain_barchart
-import diagnostic
-import diagnostic_synthesis
-import diagnostic_results
-import exam_false_responses

=== modified file 'training_evaluation/__openerp__.py'
--- training_evaluation/__openerp__.py	2011-05-03 05:54:50 +0000
+++ training_evaluation/__openerp__.py	2011-05-10 12:24:34 +0000
@@ -40,7 +40,6 @@
         'security/ir.model.access.csv',
         'sequence.xml',
         'training_evaluation_data.xml',
-        'training_evaluation_report.xml',
         'training_evaluation_wizard.xml',
         'training_evaluation_view.xml',
         'workflow/questionnaire.xml',

=== modified file 'training_evaluation/report/in_construction.py'
--- training_evaluation/report/in_construction.py	2011-04-11 10:53:20 +0000
+++ training_evaluation/report/in_construction.py	2011-05-10 12:24:34 +0000
@@ -21,32 +21,7 @@
 ##############################################################################
 
 import time
-from datetime import datetime
 from report import report_sxw
-from osv.orm import browse_record
-import netsvc
-import pooler
-import cStringIO
-import base64
-from setuptools import find_packages
-
-class fake_obj(object):
-    def __init__(self, d):
-        self.d = {}
-        for k,v  in d.iteritems():
-            if isinstance(v, dict):
-                o = fake_obj(v)
-                self.d[k] = o
-            else:
-                self.d[k] = v
-
-    def __getattr__(self, name):
-        if name == 'd':
-            return super(fake_obj, self).__getattr__(name)
-        try:
-            return self.d[name]
-        except KeyError:
-            return super(fake_obj, self).__getattr__(name)
 
 class training_evaluation_questionnaire(report_sxw.rml_parse):
     def __init__(self, cr, uid, name, context):
@@ -83,184 +58,3 @@
                       'addons/training_evaluation/report/evaluation.rml',
                       parser=parser_report,
                       header=True)
-
-class parser_global_report(report_sxw.rml_parse):
-    def __init__(self, cr, uid, name, context=None):
-        super(parser_global_report, self).__init__(cr, uid, name, context=context)
-
-        self.localcontext.update({
-            'time' : time,
-            'get_plain_results' : self._get_plain_results,
-            'get_question_by_main_category': self.get_question_by_main_category,
-            'get_eval': self.get_eval,
-            'xrange': self.xrange,
-        })
-
-    def _get_plain_results(self, global_evaluation):
-        values = {}
-        for evaluation in global_evaluation.evaluation_ids:
-            for line in evaluation.line_ids:
-                if line.question_id.type == 'plain':
-                    values.setdefault(line.question_id, []).append(line.response_plain)
-
-        res = [(k, "\n".join(v)) for k, v in values.items()]
-        return res
-
-    def get_question_by_main_category(self, questions):
-        # group question by main category
-        main_categories_list = []
-        main_categories_dict = {}
-
-        def get_main_category(category):
-            if category.parent_id:
-                return get_main_category(category.parent_id)
-            return category
-
-        for q in questions:
-            q_main_categ = get_main_category(q.category_id)
-
-            if q_main_categ not in main_categories_list:
-                main_categories_list.append(q_main_categ)
-
-            main_categories_dict.setdefault(q_main_categ, []).append(q)
-
-        return [ (x, main_categories_dict[x]) for x in main_categories_list ]
-
-    def get_eval(self, objects):
-        objs = []
-        for obj in objects:
-            if isinstance(obj, browse_record) \
-                and obj._name == 'training.evaluation.questionnaire.preview.wizard':
-                # create fake object to simulate training.evaluation.global
-                new_obj = fake_obj({
-                    'id': obj.eval_quizz_id.id,
-                    'name': obj.eval_quizz_id.name,
-                    'seance_id': {
-                        'name': self.localcontext['translate']('TEST SEANCE'),
-                        'date': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
-                        'contact_names': self.localcontext['translate']('LECTURER 1'),
-                        'course_id': {
-                            'name': self.localcontext['translate']('TEST COURSE'),
-                            'lang_id': {
-                                'code': obj.lang_id.code,
-                            },
-                        },
-                    },
-                    'questionnaire_id': obj.eval_quizz_id,
-                })
-                objs.append(new_obj)
-                continue
-            # default case, simply report the same value
-            objs.append(obj)
-        return objs
-
-    def xrange(self, number):
-        return range(number)
-
-class report_and_store_checkboxes_position(report_sxw.report_sxw):
-    def __init__(self, *args, **kwargs):
-        super(report_and_store_checkboxes_position, self).__init__(*args, **kwargs)
-        # FIXME cr is not defined here
-        # self.training_scan_result = pooler.get_pool(cr.dbname).get('training.scan.result')
-
-    def create_source_pdf(self, cr, uid, ids, data, report_xml, context=None):
-        if context is None:
-            context={}
-        pool = pooler.get_pool(cr.dbname)
-        attach = report_xml.attachment
-        if attach:
-            objs = self.getObjects(cr, uid, ids, context)
-            results = []
-            for obj in objs:
-                aname = eval(attach, {'object':obj, 'time':time})
-                result = False
-                if report_xml.attachment_use and aname and context.get('attachment_use', True) and 'preview' not in context:
-                    aids = pool.get('ir.attachment').search(cr, uid, [('datas_fname','=',aname+'.pdf'),('res_model','=',self.table),('res_id','=',obj.id)])
-                    if aids:
-                        brow_rec = pool.get('ir.attachment').browse(cr, uid, aids[0], context=context)
-                        if not brow_rec.datas:
-                            continue
-                        d = base64.decodestring(brow_rec.datas)
-                        results.append((d,'pdf'))
-                        continue
-                result = self.create_single_pdf(cr, uid, [obj.id], data, report_xml, context)
-                if not result:
-                    return False
-                try:
-                    if aname:
-                        name = aname+'.'+result[1]
-                        pool.get('ir.attachment').create(cr, uid, {
-                            'name': aname,
-                            'datas': base64.encodestring(result[0]),
-                            'datas_fname': name,
-                            'res_model': self.table,
-                            'res_id': obj.id,
-                            }, context=context
-                        )
-                        cr.commit()
-                except Exception,e:
-                     import traceback, sys
-                     tb_s = reduce(lambda x, y: x+y, traceback.format_exception(sys.exc_type, sys.exc_value, sys.exc_traceback))
-                     netsvc.Logger().notifyChannel('report', netsvc.LOG_ERROR,str(e))
-                results.append(result)
-            if results:
-                if results[0][1]=='pdf':
-                    install_pack = []
-                    for package in find_packages():
-                        install_pack.append(package)
-                    if 'report.pyPdf' not in install_pack:
-                        netsvc.Logger().notifyChannel('report', netsvc.LOG_ERROR, "pyPdf package must be install")
-                    from report.pyPdf import PdfFileWriter, PdfFileReader
-                    output = PdfFileWriter()
-                    for r in results:
-                        reader = PdfFileReader(cStringIO.StringIO(r[0]))
-                        for page in range(reader.getNumPages()):
-                            output.addPage(reader.getPage(page))
-                    s = cStringIO.StringIO()
-                    output.write(s)
-                    return s.getvalue(), results[0][1]
-        return self.create_single_pdf(cr, uid, ids, data, report_xml, context)
-
-    def create_single_pdf(self, cr, uid, ids, data, report_xml, context=None):
-        if context is None:
-            context = {}
-        # TODO regroup in context['report_misc_data']
-        pool = pooler.get_pool(cr.dbname)
-        context['checkboxes_position'] = [] # add a reference in context since it can't be modified during next call
-        context['checkboxes_context'] = [] # add a reference in context since it can't be modified during next call
-        context['participation_id'] = [] # add a reference in context since it can't be modified during next call
-        global_evaluation_id = False
-        pdf, report_type = super(report_and_store_checkboxes_position, self).create_single_pdf(cr, uid, ids, data, report_xml, context)
-        if 'preview' not in context:
-            # only store checkboxes position for real print
-            if context['participation_id']:
-                global_evaluation_id = int(context['participation_id'][0])
-            training_scan_result = pool.get('position.storage')
-            training_scan_result.save_checkboxes_position(cr, uid, 'training.evaluation.global', global_evaluation_id, context['checkboxes_position'], context['checkboxes_context'])
-
-        return pdf, report_type
-
-
-class report_evaluation(report_and_store_checkboxes_position):
-    def create(self, cr, uid, ids, data, context=None):
-        return super(report_evaluation, self).create(cr, uid, ids, data, context=context)
-
-    def getObjects(self, cr, uid, ids, context=None):
-        if context is None:
-            context = {}
-        if 'preview' in context:
-            pool = pooler.get_pool(cr.dbname)
-            return pool.get('training.evaluation.questionnaire.preview.wizard').browse(cr, uid, ids, context=context)
-        return super(report_evaluation, self).getObjects(cr, uid, ids, context=context)
-
-report_evaluation('report.training.evaluation.empty.report',
-                      'training.evaluation.global',
-                      'addons/training_evaluation/report/empty_evaluation.rml',
-                      parser=parser_global_report,
-                      header=False)
-
-report_evaluation('report.training.evaluation.empty.preview.report',
-                      'training.evaluation.questionnaire',
-                      'addons/training_evaluation/report/empty_evaluation.rml',
-                      parser=parser_global_report,
-                      header=False)

=== modified file 'training_exam/__openerp__.py'
--- training_exam/__openerp__.py	2011-05-05 13:41:51 +0000
+++ training_exam/__openerp__.py	2011-05-10 12:24:34 +0000
@@ -54,7 +54,6 @@
         'workflow/questionnaire_workflow.xml',
         'training_exam_sequence.xml',
         'training_content_review_view_i.xml',
-        'wizard/training_exam_print_questionnaire_raw_view.xml',
         'wizard/training_exam_validate_question_view.xml',
         'wizard/training_seance_generate_view.xml',
         'wizard/training_subscription_mass_line_view.xml',

=== modified file 'training_exam/report/__init__.py'
--- training_exam/report/__init__.py	2011-02-25 12:33:02 +0000
+++ training_exam/report/__init__.py	2011-05-10 12:24:34 +0000
@@ -1,7 +1,7 @@
 # -*- encoding: utf-8 -*-
 ############################################################################################
 #
-#    OpenERP, Open Source Management Solution	
+#    OpenERP, Open Source Management Solution
 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
 #    Copyright (C) 2008-2009 AJM Technologies S.A. (<http://www.ajm.lu). All Rights Reserved
 #    Copyright (C) 2010-2011 Thamini S.à.R.L (<http://www.thamini.com>). All Rights Reserved
@@ -22,7 +22,6 @@
 #
 ############################################################################################
 
-import exam_sheet
 import training_exam_result
 import training_exam_result_firstpage
 import training_seance_exam_followup_list

=== modified file 'training_exam/training_exam_report.xml'
--- training_exam/training_exam_report.xml	2011-04-05 10:40:03 +0000
+++ training_exam/training_exam_report.xml	2011-05-10 12:24:34 +0000
@@ -1,53 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <openerp>
     <data>
-        <report
-            id="training_questionnaire"
-            model="training.exam.questionnaire"
-            name="training.exam.questionnaire.report"
-            string="Preview Exam Sheet With Solution"
-            rml="training_exam/report/exam_sheet.rml"
-            header="False"/>
-
-        <report
-            id="training_seance_questions_folder"
-            model="training.seance"
-            name="training.seance.questions.folder.report"
-            string="Questions Folder"
-            rml="training_exam/report/exam_sheet.rml"
-            header="False"
-            menu="True"
-            multi="False"/>
-
-        <report
-            id="training_participation"
-            model="training.participation"
-            name="training.participation.report"
-            string="Print Original Exam Sheet"
-            rml="training_exam/report/exam_sheet.rml"
-            header="False"
-            attachment="('Exam_'+('%08d' % (object.id)))"
-            attachment_use="1"
-            groups="training_exam.group_exam_user"/>
-
-        <report
-            id="training_participation_exam_sheet_w_note"
-            model="training.participation"
-            name="training.participation.report.w.notes"
-            string="Original Exam Sheet with Corrector Notes"
-            rml="training_exam/report/exam_sheet.rml"
-            header="False"
-            auto="False"
-            groups="training_exam.group_exam_user"/>
-
-		<report
-		    id="training_participation_preview"
-		    model="training.exam.questionnaire"
-		    name="training.participation.report.preview"
-		    string="Preview Exam Sheet"
-		    rml="training_exam/report/exam_sheet.rml"
-		    header="False"
-		    groups="training_exam.group_exam_user"/>
 
         <report
             auto="False"

=== modified file 'training_exam/wizard/__init__.py'
--- training_exam/wizard/__init__.py	2011-03-15 10:34:06 +0000
+++ training_exam/wizard/__init__.py	2011-05-10 12:24:34 +0000
@@ -23,7 +23,6 @@
 ############################################################################################
 
 import training_exam_question_assign_course
-import training_exam_print_questionnaire_raw
 import training_exam_validate_question
 import training_exam_depricate_question
 import training_exam_questionnaire_create_new_version

=== added directory 'training_extra_report'
=== added directory 'training_extra_report/report'
=== added file 'training_extra_report/report/__init__.py'
--- training_extra_report/report/__init__.py	1970-01-01 00:00:00 +0000
+++ training_extra_report/report/__init__.py	2011-05-10 12:24:34 +0000
@@ -0,0 +1,34 @@
+# -*- encoding: utf-8 -*-
+############################################################################################
+#
+#    OpenERP, Open Source Management Solution
+#    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>). All Rights Reserved
+#    Copyright (C) 2008-2009 AJM Technologies S.A. (<http://www.ajm.lu). All Rights Reserved
+#    Copyright (C) 2010-2011 Thamini S.à.R.L (<http://www.thamini.com>). All Rights Reserved
+#    $Id$
+#
+#    This program is free software: you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation, either version 3 of the License, or
+#    (at your option) any later version.
+#
+#    This program is distributed in the hope that it will be useful,
+#    but WITHOUT ANY WARRANTY; without even the implied warranty of
+#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#    GNU General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+############################################################################################
+
+import exam_sheet
+import diagnostic_synthesis
+import domain_spiderchart
+import domain_barchart
+import exam_false_responses
+import diagnostic
+import diagnostic_results
+import in_construction
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== renamed file 'training_diagnostic/report/diagnostic.py' => 'training_extra_report/report/diagnostic.py'
=== renamed file 'training_diagnostic/report/diagnostic.rml' => 'training_extra_report/report/diagnostic.rml'
=== renamed file 'training_diagnostic/report/diagnostic_results.py' => 'training_extra_report/report/diagnostic_results.py'
=== renamed file 'training_diagnostic/report/diagnostic_results.rml' => 'training_extra_report/report/diagnostic_results.rml'
=== renamed file 'training_diagnostic/report/diagnostic_synthesis.py' => 'training_extra_report/report/diagnostic_synthesis.py'
=== renamed file 'training_diagnostic/report/diagnostic_synthesis.rml' => 'training_extra_report/report/diagnostic_synthesis.rml'
=== renamed file 'training_diagnostic/report/diagnostic_utils.py' => 'training_extra_report/report/diagnostic_utils.py'
=== renamed file 'training_diagnostic/report/domain_barchart.py' => 'training_extra_report/report/domain_barchart.py'
=== renamed file 'training_diagnostic/report/domain_barchart.rml' => 'training_extra_report/report/domain_barchart.rml'
=== renamed file 'training_diagnostic/report/domain_spiderchart.py' => 'training_extra_report/report/domain_spiderchart.py'
=== renamed file 'training_diagnostic/report/domain_spiderchart.rml' => 'training_extra_report/report/domain_spiderchart.rml'
=== renamed file 'training_evaluation/report/empty_evaluation.rml' => 'training_extra_report/report/empty_evaluation.rml'
=== renamed file 'training_diagnostic/report/exam_false_responses.py' => 'training_extra_report/report/exam_false_responses.py'
=== renamed file 'training_diagnostic/report/exam_false_responses.rml' => 'training_extra_report/report/exam_false_responses.rml'
=== renamed file 'training_exam/report/exam_sheet.py' => 'training_extra_report/report/exam_sheet.py'
=== renamed file 'training_exam/report/exam_sheet.rml' => 'training_extra_report/report/exam_sheet.rml'
=== renamed file 'training_exam/report/watermark_qrcode.rml' => 'training_extra_report/report/watermark_qrcode.rml'
=== renamed file 'training_diagnostic/data/report.xml' => 'training_extra_report/training_diagnostic_report.xml'
--- training_diagnostic/data/report.xml	2011-05-04 10:04:28 +0000
+++ training_extra_report/training_diagnostic_report.xml	2011-05-10 12:24:34 +0000
@@ -4,7 +4,7 @@
                 string="Domain SpiderChart"
                 model="training.participation"
                 name="training.participation.domain.spiderchart"
-                rml="training_diagnostic/report/domain_spiderchart.rml"
+                rml="training_extra_report/report/domain_spiderchart.rml"
                 groups="base.group_user"
                 header="True"
                 auto="False"/>
@@ -13,7 +13,7 @@
                 string="Domain BarChart"
                 model="training.participation"
                 name="training.participation.domain.barchart"
-                rml="training_diagnostic/report/domain_barchart.rml"
+                rml="training_extra_report/report/domain_barchart.rml"
                 groups="base.group_user"
                 header="True"
                 auto="False"/>
@@ -22,7 +22,7 @@
                 string="Diagnostic Results"
                 model="training.participation"
                 name="training.participation.diagnostic.results.report"
-                rml="addons/training_diagnostic/report/diagnostic_results.rml"
+                rml="training_extra_report/report/diagnostic_results.rml"
                 groups="base.group_user"
                 header="True"
                 auto="False"/>
@@ -31,7 +31,7 @@
                 string="Employer Diagnostic Report"
                 model="training.participation"
                 name="training.participation.diagnostic.employer.report"
-                rml="addons/training_diagnostic/report/diagnostic.rml"
+                rml="training_extra_report/report/diagnostic.rml"
                 groups="base.group_user"
                 header="True"
                 auto="False"/>
@@ -40,7 +40,7 @@
                 string="Candidate Diagnostic Report"
                 model="training.participation"
                 name="training.participation.diagnostic.candidate.report"
-                rml="addons/training_diagnostic/report/diagnostic.rml"
+                rml="training_extra_report/report/diagnostic.rml"
 		        groups="base.group_user"
                 header="True"
                 auto="False"/>
@@ -49,7 +49,7 @@
                 string="Diagnostic Synthesis Report"
                 model="training.participation"
                 name="training.participation.diagnostic.synthesis.report"
-                rml="addons/training_diagnostic/report/diagnostic_synthesis.rml"
+                rml="training_extra_report/report/diagnostic_synthesis.rml"
 		        groups="base.group_user"
                 header="False"
                 auto="False"/>
@@ -58,7 +58,7 @@
                 string="Exam False Responses"
                 model="training.participation"
                 name="training.participation.false.result.report"
-                rml="addons/training_diagnostic/report/exam_false_responses.rml"
+                rml="training_extra_report/report/exam_false_responses.rml"
 		        groups="base.group_user"
                 header="True"
                 auto="False"/>

=== renamed file 'training_evaluation/training_evaluation_report.xml' => 'training_extra_report/training_evaluation_report.xml'
--- training_evaluation/training_evaluation_report.xml	2010-09-12 18:03:37 +0000
+++ training_extra_report/training_evaluation_report.xml	2011-05-10 12:24:34 +0000
@@ -1,24 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <openerp>
     <data>
-        <report 
+        <report
             id="training_evaluation_empty_report"
             model="training.evaluation.global"
             name="training.evaluation.empty.report"
             string="Empty Evaluation Report"
-            rml="training_evaluation/report/empty_evaluation.rml"
+            rml="training_extra_report/report/empty_evaluation.rml"
             header="False"
             auto="False"
             attachment="((object.id) and ('EVAL'+('%08d' % (object.id))))"
             attachment_use="1"
             />
 
-        <report 
+        <report
             id="training_evaluation_empty_preview_report"
             model="training.evaluation.questionnaire"
             name="training.evaluation.empty.preview.report"
             string="Empty Evaluation Report"
-            rml="training_evaluation/report/empty_evaluation.rml"
+            rml="training_extra_report/report/empty_evaluation.rml"
             header="False"
             auto="False"
 	    menu="False"

=== added file 'training_extra_report/training_exam_report.xml'
--- training_extra_report/training_exam_report.xml	1970-01-01 00:00:00 +0000
+++ training_extra_report/training_exam_report.xml	2011-05-10 12:24:34 +0000
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+    <data>
+        <report
+            id="training_questionnaire"
+            model="training.exam.questionnaire"
+            name="training.exam.questionnaire.report"
+            string="Preview Exam Sheet With Solution"
+            rml="training_extra_report/report/exam_sheet.rml"
+            header="False"/>
+
+        <report
+            id="training_seance_questions_folder"
+            model="training.seance"
+            name="training.seance.questions.folder.report"
+            string="Questions Folder"
+            rml="training_extra_report/report/exam_sheet.rml"
+            header="False"
+            menu="True"
+            multi="False"/>
+
+        <report
+            id="training_participation"
+            model="training.participation"
+            name="training.participation.report"
+            string="Print Original Exam Sheet"
+            rml="training_extra_report/report/exam_sheet.rml"
+            header="False"
+            attachment="('Exam_'+('%08d' % (object.id)))"
+            attachment_use="1"
+            groups="training_exam.group_exam_user"/>
+
+        <report
+            id="training_participation_exam_sheet_w_note"
+            model="training.participation"
+            name="training.participation.report.w.notes"
+            string="Original Exam Sheet with Corrector Notes"
+            rml="training_extra_report/report/exam_sheet.rml"
+            header="False"
+            auto="False"
+            groups="training_exam.group_exam_user,portal_training.res_group_portal_examiner"/>
+
+		<report
+		    id="training_participation_preview"
+		    model="training.exam.questionnaire"
+		    name="training.participation.report.preview"
+		    string="Preview Exam Sheet"
+		    rml="training_extra_report/report/exam_sheet.rml"
+		    header="False"
+		    groups="training_exam.group_exam_user"/>
+
+        <record model="ir.actions.report.xml" id="training_seance_questions_folder">
+            <field name="groups_id" eval="[(3, ref('portal_training.res_group_portal_examiner')),(4, ref('portal_training.res_group_portal_examiner'))]"/>
+        </record>
+
+    </data>
+</openerp>

=== added directory 'training_extra_report/wizard'
=== renamed file 'training_exam/wizard/training_exam_print_questionnaire_raw.py' => 'training_extra_report/wizard/training_exam_print_questionnaire_raw.py'
=== renamed file 'training_exam/wizard/training_exam_print_questionnaire_raw_view.xml' => 'training_extra_report/wizard/training_exam_print_questionnaire_raw_view.xml'

Follow ups