openerp-dev-web team mailing list archive
-
openerp-dev-web team
-
Mailing list archive
-
Message #06522
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