diff options
| author | Raphael Collet <rco@openerp.com> | 2011-12-13 12:01:20 +0100 |
|---|---|---|
| committer | Raphael Collet <rco@openerp.com> | 2011-12-13 12:01:20 +0100 |
| commit | 6d2b3545773ce354721a313db74a3ef5b47fa2d9 (patch) | |
| tree | af9df212925ad78cd016429f8a5a1789ba993853 /addons/crm_profiling/wizard/open_questionnaire.py | |
| parent | d34a0d0e1762a73e1ac3fdcf3634c1b7cd669b15 (diff) | |
| parent | 216d028ad66c59bec3018cff954d9b49ba264920 (diff) | |
[MERGE] crm_profiling: convert wizard to osv_memory
bzr revid: rco@openerp.com-20111213110120-1ft3qibvw54s9rkh
Diffstat (limited to 'addons/crm_profiling/wizard/open_questionnaire.py')
| -rw-r--r-- | addons/crm_profiling/wizard/open_questionnaire.py | 92 |
1 files changed, 57 insertions, 35 deletions
diff --git a/addons/crm_profiling/wizard/open_questionnaire.py b/addons/crm_profiling/wizard/open_questionnaire.py index 91b82a02d1a..b13c67640fc 100644 --- a/addons/crm_profiling/wizard/open_questionnaire.py +++ b/addons/crm_profiling/wizard/open_questionnaire.py @@ -18,50 +18,72 @@ # along with this program. If not, see <http://www.gnu.org/licenses/>. # ############################################################################## -import pooler -import wizard -from tools import UpdateableStr, UpdateableDict -_QUEST_FORM = UpdateableStr() -_QUEST_FIELDS=UpdateableDict() +from osv import osv, fields +from tools.translate import _ -class open_questionnaire(wizard.interface): +class open_questionnaire_line(osv.osv_memory): + _name = 'open.questionnaire.line' + _rec_name = 'question_id' + _columns = { + 'question_id': fields.many2one('crm_profiling.question','Question', required=True), + 'answer_id': fields.many2one('crm_profiling.answer', 'Answer'), + 'wizard_id': fields.many2one('open.questionnaire', 'Questionnaire'), + } - def _questionnaire_compute(self, cr, uid, data, context): - pooler.get_pool(cr.dbname).get(data['model'])._questionnaire_compute(cr, uid, data, context) - return {} +open_questionnaire_line() +class open_questionnaire(osv.osv_memory): + _name = 'open.questionnaire' + _columns = { + 'questionnaire_id': fields.many2one('crm_profiling.questionnaire', 'Questionnaire name'), + 'question_ans_ids': fields.one2many('open.questionnaire.line', 'wizard_id', 'Question / Answers'), + } - def build_form(self, cr, uid, data, context): - quest_form, quest_fields = pooler.get_pool(cr.dbname).get('crm_profiling.questionnaire').build_form(cr, uid, data, context) - _QUEST_FORM. __init__(quest_form) - _QUEST_FIELDS.__init__(quest_fields) - return{} + def default_get(self, cr, uid, fields, context=None): + if context is None: context = {} + res = super(open_questionnaire, self).default_get(cr, uid, fields, context=context) + questionnaire_id = context.get('questionnaire_id', False) + if questionnaire_id and 'question_ans_ids' in fields: + query = """ + select question as question_id from profile_questionnaire_quest_rel where questionnaire = %s""" + cr.execute(query, (questionnaire_id,)) + result = cr.dictfetchall() + res.update(question_ans_ids=result) + return res - _questionnaire_choice_arch = '''<?xml version="1.0"?> - <form string="Questionnaire"> - <field name="questionnaire_name"/> - </form>''' + def questionnaire_compute(self, cr, uid, ids, context=None): + """ Adds selected answers in partner form """ + model = context.get('active_model') + answers = [] + if model == 'res.partner': + data = self.browse(cr, uid, ids[0], context=context) + for d in data.question_ans_ids: + if d.answer_id: + answers.append(d.answer_id.id) + self.pool.get(model)._questionnaire_compute(cr, uid, answers, context=context) + return {'type': 'ir.actions.act_window_close'} - _questionnaire_choice_fields = { - 'questionnaire_name': {'string': 'Questionnaire name', 'type': 'many2one', 'relation': 'crm_profiling.questionnaire', 'required': True }, - } - states = { - 'init': { - 'actions': [], - 'result': {'type': 'form', 'arch': _questionnaire_choice_arch, 'fields': _questionnaire_choice_fields, 'state':[('end', 'Cancel','gtk-cancel'), ('open', 'Open Questionnaire','terp-camera_test')]} - }, - 'open': { - 'actions': [build_form], - 'result': {'type': 'form', 'arch':_QUEST_FORM, 'fields': _QUEST_FIELDS, 'state':[('end', 'Cancel','gtk-cancel'), ('compute', 'Save Data','terp-stock_format-scientific')]} - }, - 'compute': { - 'actions': [], - 'result': {'type': 'action', 'action': _questionnaire_compute, 'state':'end'} + def build_form(self, cr, uid, ids, context=None): + """ Dynamically generates form according to selected questionnaire """ + models_data = self.pool.get('ir.model.data') + result = models_data._get_id(cr, uid, 'crm_profiling', 'open_questionnaire_form') + res_id = models_data.browse(cr, uid, result, context=context).res_id + datas = self.browse(cr, uid, ids[0], context=context) + context.update({'questionnaire_id': datas.questionnaire_id.id}) + + return { + 'name': _('Questionnaire'), + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'open.questionnaire', + 'type': 'ir.actions.act_window', + 'views': [(res_id,'form')], + 'target': 'new', + 'context': context } - } -open_questionnaire('open_questionnaire') +open_questionnaire() # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: |
