diff --git a/addons/survey/security/ir.model.access.csv b/addons/survey/security/ir.model.access.csv index b613e223afa..a410959376e 100644 --- a/addons/survey/security/ir.model.access.csv +++ b/addons/survey/security/ir.model.access.csv @@ -1,6 +1,5 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_survey_type_manager,survey.type.manager,model_survey_type,base.group_tool_manager,1,1,1,1 -access_survey_request_manager,survey.request manager,model_survey_request,base.group_tool_manager,1,1,1,1 access_survey_tbl_column_heading_manager,survey.tbl.column.heading manager,model_survey_tbl_column_heading,base.group_tool_manager,1,1,1,1 access_survey_res_partner_user,survey.res.partner.user,base.model_res_partner,base.group_tool_user,1,1,1,1 access_survey_user,survey.user,model_survey,base.group_tool_user,1,1,1,1 @@ -9,7 +8,6 @@ access_survey_question_user,survey.question user,model_survey_question,base.grou access_survey_answer_user,survey.answer user,model_survey_answer,base.group_tool_user,1,1,1,1 access_survey_response_user,survey.response user,model_survey_response,base.group_tool_user,1,1,1,1 access_survey_response_answer_user,survey.response.answer user,model_survey_response_answer,base.group_tool_user,1,1,1,1 -access_survey_history_user,survey.history.user,model_survey_history,base.group_tool_user,1,1,1,1 access_survey_response_line_user,survey.response.line user,model_survey_response_line,base.group_tool_user,1,1,1,1 access_survey_res_partner_user,survey.res.partner.user,base.model_res_partner,base.group_tool_user,1,1,1,1 access_survey_survey_user,survey.survey.user,model_survey,base.group_survey_user,1,1,1,1 @@ -18,7 +16,6 @@ access_survey_question_survey_user,survey.question.survey.user,model_survey_ques access_survey_answer_survey_user,survey.answer.survey.user,model_survey_answer,base.group_survey_user,1,1,1,1 access_survey_response_survey_user,survey.response.survey.user,model_survey_response,base.group_survey_user,1,1,1,1 access_survey_response_answer_survey_user,survey.response.answer.survey.user,model_survey_response_answer,base.group_survey_user,1,1,1,1 -access_survey_history_survey_user,survey.history.survey.user,model_survey_history,base.group_survey_user,1,1,1,1 access_survey_response_line_survey_user,survey.response.line.survey.user,model_survey_response_line,base.group_survey_user,1,1,1,1 access_survey_question_column_heading_survey_user,survey.question.column.heading.survey.user,model_survey_question_column_heading,base.group_survey_user,1,0,0,0 access_survey_question_column_heading_user,survey.question.column.heading user,model_survey_question_column_heading,base.group_tool_user,1,1,1,1 diff --git a/addons/survey/survey.py b/addons/survey/survey.py index 79f30df1a37..e578326cc71 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -20,15 +20,12 @@ ############################################################################## import copy -from datetime import datetime -from dateutil.relativedelta import relativedelta from time import strftime -import os -from openerp import netsvc, tools from openerp.osv import fields, osv from openerp.tools.translate import _ + class survey_type(osv.osv): _name = 'survey.type' _description = 'Survey Type' @@ -38,6 +35,7 @@ class survey_type(osv.osv): } survey_type() + class survey(osv.osv): _name = 'survey' _description = 'Survey' @@ -231,6 +229,7 @@ class survey(osv.osv): survey() + class survey_page(osv.osv): _name = 'survey.page' _description = 'Survey Pages' @@ -281,6 +280,7 @@ class survey_page(osv.osv): survey_page() + class survey_question(osv.osv): _name = 'survey.question' _description = 'Survey Question' @@ -592,6 +592,7 @@ class survey_question_column_heading(osv.osv): } survey_question_column_heading() + class survey_answer(osv.osv): _name = 'survey.answer' _description = 'Survey Answer' @@ -649,19 +650,20 @@ class survey_answer(osv.osv): survey_answer() + class survey_response(osv.osv): _name = "survey.response" _rec_name = 'date_create' _columns = { 'date_deadline': fields.date("Deadline date", help="Date by which the person can respond to the survey"), - 'survey_id' : fields.many2one('survey', 'Survey', required=1, ondelete='cascade'), + 'survey_id' : fields.many2one('survey', 'Survey', required=1, readonly=1, ondelete='cascade'), 'date_create' : fields.datetime('Create Date', required=1), - 'response_type' : fields.selection([('manually', 'Manually'), ('link', 'Link')], 'Answer Type', required=1, readonly=1), + 'response_type' : fields.selection([('manually', 'Manually'), ('link', 'Link')], 'Answer Type', required=1), 'question_ids' : fields.one2many('survey.response.line', 'response_id', 'Answer'), - 'state' : fields.selection([('new', 'Not Started'),('done', 'Finished'),('skip', 'Not Finished')], 'Status', readonly=True), - 'token': fields.char("Indentification token"), - 'partner_id' : fields.many2one('res.partner', 'Partner'), - 'email': fields.char("Email", size=64), + 'state' : fields.selection([('new', 'Wait answer'), ('done', 'Finished'), ('skip', 'Not Finished')], 'Status', readonly=True), + 'token': fields.char("Indentification token", readonly=1), + 'partner_id' : fields.many2one('res.partner', 'Partner', readonly=1), + 'email': fields.char("Email", size=64, readonly=1), } _defaults = { 'state' : lambda * a: "new", @@ -683,6 +685,7 @@ class survey_response(osv.osv): survey_response() + class survey_response_line(osv.osv): _name = 'survey.response.line' _description = 'Survey Response Line' @@ -707,6 +710,7 @@ class survey_response_line(osv.osv): survey_response_line() + class survey_tbl_column_heading(osv.osv): _name = 'survey.tbl.column.heading' _order = 'name' @@ -719,6 +723,7 @@ class survey_tbl_column_heading(osv.osv): survey_tbl_column_heading() + class survey_response_answer(osv.osv): _name = 'survey.response.answer' _description = 'Survey Answer' @@ -735,6 +740,7 @@ class survey_response_answer(osv.osv): survey_response_answer() + class res_partner(osv.osv): _inherit = "res.partner" _name = "res.partner" @@ -743,47 +749,4 @@ class res_partner(osv.osv): } res_partner() -class survey_request(osv.osv): - _name = "survey.request" - _order = 'date_deadline' - _rec_name = 'date_deadline' - - _columns = { - 'date_deadline': fields.date("Deadline date"), - 'token': fields.char("Indentification token"), - 'partner_id': fields.many2one("res.partner", "Partner"), - 'email': fields.char("Email", size=64), - 'survey_id': fields.many2one("survey", "Survey", required=1, ondelete='cascade'), - 'response_id': fields.many2one('survey.response', 'Answer'), - 'state': fields.selection([('draft','Draft'),('cancel', 'Cancelled'),('waiting_answer', 'Waiting Answer'),('done', 'Done')], 'Status', readonly=1) - } - _defaults = { - 'state': lambda * a: 'draft', -# 'date_deadline': lambda * a : (datetime.now() + relativedelta(months=+1)).strftime("%Y-%m-%d %H:%M:%S") - } - def survey_req_waiting_answer(self, cr, uid, ids, arg): - self.write(cr, uid, ids, { 'state' : 'waiting_answer'}) - return True - - def survey_req_draft(self, cr, uid, ids, arg): - self.write(cr, uid, ids, { 'state' : 'draft'}) - return True - - def survey_req_done(self, cr, uid, ids, arg): - self.write(cr, uid, ids, { 'state' : 'done'}) - return True - - def survey_req_cancel(self, cr, uid, ids, arg): - self.write(cr, uid, ids, { 'state' : 'cancel'}) - return True - - def on_change_partner(self, cr, uid, ids, partner_id, context=None): - if partner_id: - partner_obj = self.pool.get('res.partner') - partner = partner_obj.browse(cr, uid, partner_id, context=context) - return {'value': {'email': partner.email}} - return {} - -survey_request() - # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/survey/survey_view.xml b/addons/survey/survey_view.xml index 68b5cd575cb..23f3adbb33e 100644 --- a/addons/survey/survey_view.xml +++ b/addons/survey/survey_view.xml @@ -999,17 +999,46 @@ Survey Response --> - - survey_response_form + + survey_response_search survey.response -
+ - + - - - + + + + + + + + + + + survey_response_tree + survey.response + + +
+ +
+ + + + + + + + + + + + + + +
@@ -1018,16 +1047,36 @@ survey_response_tree survey.response - + + +
+ + Survey Type + survey.response + form + tree,form + + + +

+ Nobody have reply to your surveys. +

+
+
+ + + @@ -1080,86 +1129,6 @@
- - - - survey_request_form - survey.request - -
-
-
- - - - - - - - - -
-
-
- - - survey_request_tree - survey.request - - - - - - - - - - - - - - survey_request_search - survey.request - - - - - - - - - - - - - - - - - - - - - Survey Requests - survey.request - form - tree,form - ['|', ('partner_id.user_id.id','=',uid), ('survey_id.responsible_id.id','=',uid)] - - - - - - @@ -1222,12 +1191,5 @@ res_model="survey.answer" src_model="survey.question"/> - - diff --git a/addons/survey/wizard/survey_answer.py b/addons/survey/wizard/survey_answer.py index a6a5652ebca..8832f10398d 100644 --- a/addons/survey/wizard/survey_answer.py +++ b/addons/survey/wizard/survey_answer.py @@ -209,24 +209,31 @@ class survey_question_wiz(osv.osv_memory): def _check_token(self, cr, uid, survey_id, context): # get if the token of the partner or anonymous user is valid + res = {'partner_id': False, 'response_id': False, 'state': None} + + if not survey_id: + return res + survey_browse = self.pool.get('survey').browse(cr, uid, survey_id, context=context) + if False and survey_browse.responsible_id.id == uid: + res['partner_id'] = survey_browse.responsible_id.partner_id.id or False + return res - if survey_browse.responsible_id.id == uid: - response_id = False - partner_id = survey_browse.responsible_id.partner_id.id or False + sur_response_obj = self.pool.get('survey.response') + dom = [('survey_id', '=', survey_id), ('state', 'in', ['new', 'skip']), "|", ('date_deadline', '=', None), ('date_deadline', '<', datetime.now())] + + if context.get("survey_token", None): + response_id = sur_response_obj.search(cr, uid, dom + [("token", "=", context.get("survey_token", None))], context=context, limit=1, order="date_deadline DESC") else: - sur_response_obj = self.pool.get('survey.response') - pid = self.pool.get('res.users').browse(cr, uid, uid, context=context).partner_id.id - response_id = sur_response_obj.search(cr, uid, [ - ('survey_id', '=', survey_browse.id), ('state', '=', 'new'), - '|', ('partner_id', '=', pid), ("token", "=", context.get("survey_token", None)), - '|', ('date_deadline', '=', None), ('date_deadline', '<', datetime.now())], context=context, limit=1) - if response_id: - sur_response_browse = sur_response_obj.browse(cr, uid, response_id[0], context=context) - partner_id = sur_response_browse.partner_id.id or False + response_id = sur_response_obj.search(cr, uid, dom + [('partner_id', '=', pid)], context=context, limit=1, order="date_deadline DESC") - return {'partner_id': partner_id or False, 'response_id': response_id and response_id[0] or False} + if response_id: + sur_response_browse = sur_response_obj.browse(cr, uid, response_id[0], context=context) + res['partner_id'] = sur_response_browse.partner_id.id or False + res['state'] = sur_response_browse.state + + return res def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False): """ @@ -469,10 +476,10 @@ class survey_question_wiz(osv.osv_memory): tot_page_id = self.pool.get('survey').browse(cr, uid, context.get('survey_id', False)) tot_per = (float(100) * (int(field.split('_')[2]) + 1) / len(tot_page_id.page_ids)) value[field] = tot_per - response_obj = self.pool.get('survey.response') + sur_response_obj = self.pool.get('survey.response') surv_name_wiz = self.pool.get('survey.name.wiz') if context.get('response_id') and int(context['response_id'][0]) > 0: - response_ans = response_obj.browse(cr, uid, context['response_id'][context['response_no']]) + response_ans = sur_response_obj.browse(cr, uid, context['response_id'][context['response_no']]) fields_list.sort() for que in response_ans.question_ids: @@ -552,26 +559,25 @@ class survey_question_wiz(osv.osv_memory): click_state = True click_update = [] surv_name_wiz = self.pool.get('survey.name.wiz') - surv_all_resp_obj = self.pool.get('survey.response') + sur_response_obj = self.pool.get('survey.response') surv_tbl_column_obj = self.pool.get('survey.tbl.column.heading') survey_obj = self.pool.get('survey') resp_obj = self.pool.get('survey.response.line') res_ans_obj = self.pool.get('survey.response.answer') que_obj = self.pool.get('survey.question') - sur_name_read = surv_name_wiz.read(cr, uid, context.get('sur_name_id', False), []) - response_id = 0 + sur_name_read = surv_name_wiz.read(cr, uid, context.get('sur_name_id', False), context=context) if not sur_name_read['response']: - response_id = surv_all_resp_obj.create(cr, uid, {'response_type': 'link', 'partner_id': check_token['partner_id'], 'date_create': datetime.now(), 'survey_id': context['survey_id']}) - surv_name_wiz.write(cr, uid, [context.get('sur_name_id', False)], {'response': tools.ustr(response_id)}) - else: response_id = int(sur_name_read['response']) + elif check_token['response_id']: + response_id = check_token['response_id'] + else: + response_id = sur_response_obj.create(cr, uid, {'response_type': 'link', 'partner_id': check_token['partner_id'], 'date_create': datetime.now(), 'survey_id': context.get('survey_id')}) - if response_id not in surv_all_resp_obj.search(cr, uid, []): - response_id = surv_all_resp_obj.create(cr, uid, {'response_type': 'link', 'partner_id': check_token['partner_id'], 'date_create': datetime.now(), 'survey_id': context.get('survey_id', False)}) - surv_name_wiz.write(cr, uid, [context.get('sur_name_id', False)], {'response': tools.ustr(response_id)}) + surv_name_wiz.write(cr, uid, [context.get('sur_name_id', False)], {'response': tools.ustr(response_id)}) + sur_response_obj.write(cr, uid, response_id, {'state': 'skip'}) - #click first time on next button then increemnet on total start suvey + #click first time on next button then increment on total start suvey if not safe_eval(sur_name_read['store_ans']): survey_id = sur_name_read['survey_id'][0] survey_browse = survey_obj.read(cr, uid, survey_id) @@ -753,7 +759,7 @@ class survey_question_wiz(osv.osv_memory): if val and key.split('_')[1] == "commentcolumn" and key.split('_')[0] == que_id: for res_id in response_list: if key.split('_')[2] in res_id.split('_')[1]: - a = res_ans_obj.write(cr, uid, [res_id.split('_')[0]], {'comment_field': val}) + res_ans_obj.write(cr, uid, [res_id.split('_')[0]], {'comment_field': val}) sur_name_read['store_ans'][resp_id].update({key: val}) if comment_field and comment_value: