[IMP] survey: check_token, view for survey response

bzr revid: chm@openerp.com-20130215130924-uiy66a1q9n5yqoud
This commit is contained in:
Christophe Matthieu
2013-02-15 14:09:24 +01:00
parent 70ebd35d62
commit 6d0a71f546
4 changed files with 105 additions and 177 deletions
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 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
3 access_survey_tbl_column_heading_manager survey.tbl.column.heading manager model_survey_tbl_column_heading base.group_tool_manager 1 1 1 1
4 access_survey_res_partner_user survey.res.partner.user base.model_res_partner base.group_tool_user 1 1 1 1
5 access_survey_user survey.user model_survey base.group_tool_user 1 1 1 1
8 access_survey_answer_user survey.answer user model_survey_answer base.group_tool_user 1 1 1 1
9 access_survey_response_user survey.response user model_survey_response base.group_tool_user 1 1 1 1
10 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
11 access_survey_response_line_user survey.response.line user model_survey_response_line base.group_tool_user 1 1 1 1
12 access_survey_res_partner_user survey.res.partner.user base.model_res_partner base.group_tool_user 1 1 1 1
13 access_survey_survey_user survey.survey.user model_survey base.group_survey_user 1 1 1 1
16 access_survey_answer_survey_user survey.answer.survey.user model_survey_answer base.group_survey_user 1 1 1 1
17 access_survey_response_survey_user survey.response.survey.user model_survey_response base.group_survey_user 1 1 1 1
18 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
19 access_survey_response_line_survey_user survey.response.line.survey.user model_survey_response_line base.group_survey_user 1 1 1 1
20 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
21 access_survey_question_column_heading_user survey.question.column.heading user model_survey_question_column_heading base.group_tool_user 1 1 1 1
+16 -53
View File
@@ -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:
+57 -95
View File
@@ -999,17 +999,46 @@
Survey Response
-->
<record model="ir.ui.view" id="survey_response_form">
<field name="name">survey_response_form</field>
<record id="survey_response_search" model="ir.ui.view">
<field name="name">survey_response_search</field>
<field name="model">survey.response</field>
<field name="arch" type="xml">
<form string="Survey Answer">
<search string="Search Survey">
<field name="survey_id"/>
<field name="date_create"/>
<field name="email"/>
<field name="partner_id"/>
<field name="response_type"/>
<field name="question_ids" nolabel="1" colspan="4" />
<field name="state"/>
<group expand="0" string="Group By...">
<filter string="Survey" domain="[]" context="{'group_by':'survey_id'}"/>
<filter string="Email" domain="[]" context="{'group_by':'email'}"/>
<filter string="Partner" domain="[]" context="{'group_by':'partner_id'}"/>
</group>
</search>
</field>
</record>
<record model="ir.ui.view" id="survey_response_tree">
<field name="name">survey_response_tree</field>
<field name="model">survey.response</field>
<field name="arch" type="xml">
<form string="Survey Response" version="7.0">
<header>
<field name="state" widget="statusbar"/>
</header>
<sheet>
<group col="2">
<group>
<field name="survey_id"/>
<field name="date_create"/>
<field name="date_deadline"/>
<field name="response_type"/>
</group>
<group>
<field name="partner_id"/>
<field name="email"/>
<field name="token"/>
</group>
</group>
</sheet>
</form>
</field>
</record>
@@ -1018,16 +1047,36 @@
<field name="name">survey_response_tree</field>
<field name="model">survey.response</field>
<field name="arch" type="xml">
<tree string="Survey Answer">
<tree string="Survey Response" version="7.0">
<field name="survey_id"/>
<field name="date_create"/>
<field name="date_deadline"/>
<field name="partner_id"/>
<field name="email"/>
<field name="response_type"/>
<field name="state"/>
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="action_survey_response">
<field name="name">Survey Type</field>
<field name="res_model">survey.response</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="view_id" ref="survey_response_tree"></field>
<field name="search_view_id" ref="survey_response_search"/>
<field name="help" type="html">
<p>
Nobody have reply to your surveys.
</p>
</field>
</record>
<menuitem name="Survey Responses" id="menu_survey_type_form1"
action="action_survey_response" parent="menu_surveys"
groups="base.group_tool_manager" sequence="3"/>
<!--
Survey Response Answer
-->
@@ -1080,86 +1129,6 @@
</field>
</record>
<!--
Survey Request
-->
<record model="ir.ui.view" id="survey_request_form">
<field name="name">survey_request_form</field>
<field name="model">survey.request</field>
<field name="arch" type="xml">
<form string="Request" version="7.0">
<header>
<button name="survey_req_draft" string="Set to Draft" states="cancel,done" type="object"/>
<button name="survey_req_waiting_answer" string="Waiting Answer" states="draft" type="object" class="oe_highlight"/>
<button name="survey_req_done" string="Done" states="waiting_answer" type="object" class="oe_highlight"/>
<button name="survey_req_cancel" string="Cancel" states="waiting_answer" type="object"/>
<field name="state" widget="statusbar" statusbar_visible="draft,waiting_answer"/>
</header>
<sheet string="Survey Request">
<group class="oe_header">
<field name="date_deadline"/>
<field name="survey_id"/>
<field name="partner_id" on_change="on_change_partner(partner_id)"/>
<field name="email"/>
<field name="response_id" readonly="1"/>
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="survey_request_tree">
<field name="name">survey_request_tree</field>
<field name="model">survey.request</field>
<field name="arch" type="xml">
<tree string="Evaluation Plan Phase" colors="red:date_deadline&lt;current_date">
<field name="date_deadline"/>
<field name="partner_id"/>
<field name="email"/>
<field name="survey_id"/>
<field name="response_id" />
<field name="state" />
</tree>
</field>
</record>
<record id="survey_request_search" model="ir.ui.view">
<field name="name">survey_request_search</field>
<field name="model">survey.request</field>
<field name="arch" type="xml">
<search string="Search Survey">
<field name="email" string="Survey"/>
<separator/>
<filter icon="terp-gtk-media-pause" string="Waiting Answer" domain="[('state','=','waiting_answer')]"/>
<filter icon="terp-emblem-important" string="Late" domain="[('date_deadline','&lt;',current_date)]"/>
<separator/>
<filter string="My Survey(s)" icon="terp-personal" domain="[('partner_id.user_id.id','=',uid)]"/>
<field name="survey_id" widget="selection"/>
<field name="partner_id"/>
<group expand="0" string="Group By...">
<filter string="Partner" icon="terp-personal" domain="[]" context="{'group_by':'partner_id'}"/>
<filter string="Survey" icon="terp-stock_align_left_24" domain="[]" context="{'group_by':'survey_id'}"/>
<filter string="Status" icon="terp-stock_effects-object-colorize" domain="[]" context="{'group_by':'state'}"/>
</group>
</search>
</field>
</record>
<record model="ir.actions.act_window" id="action_survey_request_tree">
<field name="name">Survey Requests</field>
<field name="res_model">survey.request</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">['|', ('partner_id.user_id.id','=',uid), ('survey_id.responsible_id.id','=',uid)]</field>
<field name="view_id" ref="survey_request_tree"></field>
<field name="search_view_id" ref="survey_request_search"/>
</record>
<menuitem name="Survey Requests" id="menu_survey_type_form1"
action="action_survey_request_tree" parent="menu_surveys"
groups="base.group_tool_manager" sequence="3"/>
<!--
Survey Type
-->
@@ -1222,12 +1191,5 @@
res_model="survey.answer"
src_model="survey.question"/>
<act_window
context="{'search_default_survey_id': active_id, 'default_survey_id': active_id}"
id="act_survey_request"
name="Survey Requests"
res_model="survey.request"
src_model="survey"/>
</data>
</openerp>
+32 -26
View File
@@ -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: