diff --git a/addons/survey/survey.py b/addons/survey/survey.py index c415b902f73..a885f4f5d4a 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -138,62 +138,41 @@ class survey(osv.osv): } return report + def _check_valid(self, cr, uid, ids, context=None): + sur_browse = self.browse(cr, uid, ids[0], context=context) + if not sur_browse.page_ids: + raise osv.except_osv(_('Warning!'), _('This survey has no question defined or has no pages defined. Please define the questions and answers first.')) + def fill_survey(self, cr, uid, ids, context=None): - sur_obj = self.read(cr, uid, ids, ['title', 'page_ids'], context=context) - for sur in sur_obj: - name = sur['title'] - pages = sur['page_ids'] - if not pages: - raise osv.except_osv(_('Warning!'), _('This survey has no question defined. Please define the questions and answers first.')) - context.update({'active': False, 'survey_id': ids[0]}) + self._check_valid(cr, uid, ids, context=context) - return { - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'survey.question.wiz', - 'type': 'ir.actions.act_window', - 'target': 'inline', - 'name': name, - 'context': context - } - - def test_survey(self, cr, uid, ids, context=None): - sur_obj = self.read(cr, uid, ids, ['title', 'page_ids'], context=context) - for sur in sur_obj: - name = sur['title'] - pages = sur['page_ids'] - if not pages: - raise osv.except_osv(_('Warning!'), _('This survey has no pages defined. Please define pages first.')) - context.update({'active': False, 'survey_id': ids[0]}) - - context.update({'ir_actions_act_window_target': 'new'}) - return { - 'view_type': 'form', - 'view_mode': 'form', - 'res_model': 'survey.question.wiz', - 'type': 'ir.actions.act_window', - 'target': 'inline', - 'name': name, - 'context': context - } - - def edit_survey(self, cr, uid, ids, context=None): - sur_obj = self.read(cr, uid, ids, ['title', 'page_ids'], context=context) - for sur in sur_obj: - name = sur['title'] - pages = sur['page_ids'] - if not pages: - raise osv.except_osv(_('Warning!'), _('This survey has no question defined. Please define the questions and answers first.')) - context.update({'survey_id': ids[0]}) - - context.update({'ir_actions_act_window_target': 'new'}) + id = ids[0] + context.update({'active': False, 'survey_id': id}) return { 'view_type': 'form', 'view_mode': 'form', 'res_model': 'survey.question.wiz', 'type': 'ir.actions.act_window', 'target': 'new', - 'name': name, + 'name': self.browse(cr, uid, id, context=context).title, + 'context': context + } + + def edit_survey(self, cr, uid, ids, context=None): + id = ids[0] + context.update({ + 'active': False, + 'survey_id': id, + 'edit': True, + 'ir_actions_act_window_target': 'new' + }) + return { + 'view_type': 'form', + 'view_mode': 'form', + 'res_model': 'survey.question.wiz', + 'type': 'ir.actions.act_window', + 'target': 'new', + 'name': self.browse(cr, uid, id, context=context).title, 'context': context } @@ -201,6 +180,12 @@ class survey(osv.osv): ''' This function opens a window to compose an email, with the survey template message loaded by default ''' + self._check_valid(cr, uid, ids, context=context) + + survey_browse = self.pool.get('survey').browse(cr, uid, ids, context=context)[0] + if survey_browse.state not in ["open", "restricted"]: + raise osv.except_osv(_('Warning!'), _("You cannot send invitations because the survey is not open.")) + assert len(ids) == 1, 'This option should only be used for a single id at a time.' ir_model_data = self.pool.get('ir.model.data') try: diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index bbc45e8a179..fa0d8accd33 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -32,7 +32,6 @@
-
diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index 78d88bae87c..5e31c39e11c 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -244,7 +244,7 @@ class survey_question_wiz(osv.osv_memory): res['response_id'] = response_id res['state'] = 'new' - else: + elif not context.get('edit'): response_ids = sur_response_obj.search(cr, uid, [('survey_id', '=', survey_id), '|', ("token", "=", context.get("survey_token", None)), ('partner_id', '=', pid)], context=context, limit=1, order="date_deadline DESC") if not response_ids: res['error_message'] = _("You do not have access to this survey.") @@ -257,7 +257,7 @@ class survey_question_wiz(osv.osv_memory): else: res['error_message'] = _("You do not have access to this survey.") - if survey_browse.state not in ["open", "restricted"]: + if not context.get('edit') and survey_browse.state not in ["open", "restricted"]: res['error_message'] = _("You cannot answer because the survey is not open.") return res @@ -339,9 +339,6 @@ class survey_question_wiz(osv.osv_memory): if sur_name_read.page == "next" or sur_name_rec.page_no == -1: if total_pages > sur_name_rec.page_no + 1: - if not active and not sur_name_rec.page_no + 1 and survey_browse.state not in ["open", "restricted"]: - raise osv.except_osv(_('Warning!'), _("You cannot answer because the survey is not open.")) - if survey_browse.max_response_limit and survey_browse.max_response_limit <= survey_browse.tot_start_survey and not sur_name_rec.page_no + 1: survey_obj.write(cr, uid, survey_id, {'state': 'close', 'date_close': datetime.now()})