[IMP] survey: in progress (+_survey_complete function)

bzr revid: chm@openerp.com-20130215084351-dqq3mht6puj3yyz8
This commit is contained in:
Christophe Matthieu
2013-02-15 09:43:51 +01:00
parent 2a6c6fe59d
commit 6225565d51
3 changed files with 55 additions and 76 deletions
+3 -3
View File
@@ -63,11 +63,11 @@ class survey(osv.osv):
'tot_comp_survey': fields.integer("Total Completed Survey", readonly=1),
'note': fields.text('Description', size=128),
'history': fields.one2many('survey.history', 'survey_id', 'History Lines', readonly=True),
'partner_id': fields.many2many('res.partner', 'survey_partner_rel', 'sid', 'uid', 'Partners'),
'partner_id': fields.many2many('res.partner', 'survey_partner_rel', 'sid', 'partner_id', 'Partners'),
'send_response': fields.boolean('Email Notification on Answer'),
'type': fields.many2one('survey.type', 'Type'),
'color': fields.integer('Color Index'),
'invited_partner_ids': fields.many2many('res.partner', 'survey_invited_partner_rel', 'sid', 'uid', 'Invited User'),
'invited_partner_ids': fields.many2many('res.partner', 'survey_invited_partner_rel', 'sid', 'partner_id', 'Invited User'),
}
_defaults = {
'state': lambda * a: "open",
@@ -754,7 +754,7 @@ class res_partner(osv.osv):
_inherit = "res.partner"
_name = "res.partner"
_columns = {
'survey_id': fields.many2many('survey', 'survey_partner_rel', 'uid', 'sid', 'Groups'),
'survey_id': fields.many2many('survey', 'survey_partner_rel', 'partner_id', 'sid', 'Groups'),
}
res_partner()
+43 -64
View File
@@ -161,17 +161,42 @@ class survey_question_wiz(osv.osv_memory):
def _view_field_rating_scale(self, xml_group, fields, readonly, que, que_rec):
self._view_field_matrix_of_choices_only_one_ans(xml_group, fields, readonly, que, que_rec)
def _view_field_after_matrix_of_choices(self, xml_group, fields, readonly, que, que_rec):
if que_rec.type in ['multiple_choice_only_one_ans', 'multiple_choice_multiple_ans'] and que_rec.comment_field_type in ['char','text'] and que_rec.make_comment_field:
etree.SubElement(xml_group, 'field', {'readonly' :str(readonly), 'name': tools.ustr(que.id) + "_otherfield", 'colspan':"4"})
fields[tools.ustr(que.id) + "_otherfield"] = {'type':'boolean', 'string':que_rec.comment_label, 'views':{}}
etree.SubElement(xml_group, 'field', {'readonly' :str(readonly), 'name': tools.ustr(que.id) + "_other", 'nolabel':"1" ,'colspan':"4"})
fields[tools.ustr(que.id) + "_other"] = {'type': que_rec.comment_field_type, 'string': '', 'views':{}}
else:
etree.SubElement(xml_group, 'label', {'string': to_xml(tools.ustr(que_rec.comment_label)),'colspan':"4"})
etree.SubElement(xml_group, 'field', {'readonly' :str(readonly), 'name': tools.ustr(que.id) + "_other", 'nolabel':"1" ,'colspan':"4"})
fields[tools.ustr(que.id) + "_other"] = {'type': que_rec.comment_field_type, 'string': '', 'views':{}}
def _view_survey_complete(self, result):
xml_form = etree.Element('form', {'string': _('Complete Survey Answer')})
#xml_footer = etree.SubElement(xml_form, 'footer', {'col': '6', 'colspan': '4' ,'class': 'oe_survey_title_height'})
etree.SubElement(xml_form, 'separator', {'string': 'Survey Completed', 'colspan': "4"})
etree.SubElement(xml_form, 'label', {'string': 'Thanks for your Answer'})
etree.SubElement(xml_form, 'newline')
root = xml_form.getroottree()
result['arch'] = etree.tostring(root)
result['fields'] = {}
result['context'] = context
def _survey_complete(self, survey_id, partner_id, sur_rec):
survey_obj = self.pool.get('survey')
sur_response_obj = self.pool.get('survey.response')
# record complete
survey_obj.write(cr, uid, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'})
# send mail to the responsible
survey_data = survey_obj.browse(cr, uid, survey_id, context.context)
responsible_id = survey_data.responsible_id and survey_data.responsible_id.email or False
if sur_rec.send_response and responsible_id:
val = {
'type': 'notification',
'author_id': partner_id or None,
'partner_ids': [responsible_id],
'notified_partner_ids': [responsible_id],
'model': 'survey',
'res_id': survey_id,
'record_name': _("Survey N° %s") % survey_id,
'subject': survey_data.title,
'body': _("A survey answer is completed."),
}
self.pool.get('mail.thread').create(cr, uid, val, context=context)
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
"""
Fields View Get method :- generate the new view and display the survey pages of selected survey.
@@ -190,6 +215,9 @@ class survey_question_wiz(osv.osv_memory):
que_col_head = self.pool.get('survey.question.column.heading')
user_obj = self.pool.get('res.users')
user_browse = user_obj.browse(cr, uid, uid, context=context)
#todo
partner_id = 0
partner_email = 'fqsdf@fdqsf'
partner_obj = self.pool.get('res.partner')
mail_message = self.pool.get('mail.message')
@@ -249,7 +277,7 @@ class survey_question_wiz(osv.osv_memory):
# get if the token of the partner or anonymous user is valid
validate_response = sur_rec.responsible_id.id == uid or sur_response_obj.search(cr, uid, [('survey_id','=',survey_id), ('state','=','new'),
'|', ('partner_id','=',user_browse.partner_id.id), ("token","=", context.get("survey_token", None)),
'|', ('partner_id','=',partner_id), ("token","=", context.get("survey_token", None)),
'|', ('date_deadline','=',None), ('date_deadline','<',datetime.now())], context=context, limit=1)
active = context.get('active', False)
@@ -383,57 +411,9 @@ class survey_question_wiz(osv.osv_memory):
# survey complete
else:
survey_obj.write(cr, uid, survey_id, {'tot_comp_survey' : sur_rec.tot_comp_survey + 1})
sur_response_obj.write(cr, uid, [sur_name_read.response], {'state' : 'done'})
self._survey_complete(survey_id, partner_id, sur_rec)
self._view_survey_complete(result):
if sur_rec.send_response:
survey_data = survey_obj.browse(cr, uid, survey_id)
response_id = surv_name_wiz.read(cr, uid, context.get('sur_name_id',False))['response']
report = self.create_report(cr, uid, [survey_id], 'report.survey.browse.response', survey_data.title,context)
attachments = {}
pdf_filename = addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf"
if os.path.exists(pdf_filename):
file = open(pdf_filename)
file_data = ""
while 1:
line = file.readline()
file_data += line
if not line:
break
attachments[survey_data.title + ".pdf"] = file_data
file.close()
os.remove(addons.get_module_resource('survey', 'report') + survey_data.title + ".pdf")
context.update({'response_id':response_id})
partner_email = user_browse.email
resp_email = survey_data.responsible_id and survey_data.responsible_id.email or False
if partner_email and resp_email:
partner_name = partner_obj.browse(cr, uid, uid, context=context).name
mail = "Hello " + survey_data.responsible_id.name + ",\n\n " + str(partner_name) + " has given the Response Of " + survey_data.title + " Survey.\nThe Response has been attached herewith.\n\n Thanks."
vals = {'state': 'outgoing',
'subject': "Survey Answer Of " + partner_name,
'body_html': '<pre>%s</pre>' % mail,
'email_to': [resp_email],
'email_from': partner_email}
if attachments:
vals['attachment_ids'] = [(0,0,{'name': a_name,
'datas_fname': a_name,
'datas': str(a_content).encode('base64')})
for a_name, a_content in attachments.items()]
self.pool.get('mail.mail').create(cr, uid, vals, context=context)
xml_form = etree.Element('form', {'string': _('Complete Survey Answer')})
xml_footer = etree.SubElement(xml_form, 'footer', {'col': '6', 'colspan': '4' ,'class': 'oe_survey_title_height'})
etree.SubElement(xml_form, 'separator', {'string': 'Survey Completed', 'colspan': "4"})
etree.SubElement(xml_form, 'label', {'string': 'Thanks for your Answer'})
etree.SubElement(xml_form, 'newline')
# etree.SubElement(xml_footer, 'button', {'special':"cancel",'string':"OK",'colspan':"2",'class':'oe_highlight'})
root = xml_form.getroottree()
result['arch'] = etree.tostring(root)
result['fields'] = {}
result['context'] = context
# don't have acces to this survey
else:
@@ -460,9 +440,8 @@ class survey_question_wiz(osv.osv_memory):
service = netsvc.LocalService(report_name);
(result, format) = service.create(cr, uid, res_ids, {}, context)
ret_file_name = addons.get_module_resource('survey', 'report') + file_name + '.pdf'
fp = open(ret_file_name, 'wb+');
fp.write(result);
fp.close();
with open(ret_file_name, 'wb+') as fp:
fp.write(result)
# hr.applicant: if survey answered directly in system: attach report to applicant
if context.get('active_model') == 'hr.applicant':
+9 -9
View File
@@ -47,15 +47,15 @@ class survey_name_wiz(osv.osv_memory):
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False, submenu=False):
res = super(survey_name_wiz, self).fields_view_get(cr, uid, view_id=view_id, view_type=view_type, context=context, toolbar=toolbar, submenu=False)
if uid != 1:
survey_obj = self.pool.get('survey')
line_ids = survey_obj.search(cr, uid, [('invited_partner_ids.user_id','in',uid)], context=context)
domain = str([('id', 'in', line_ids)])
doc = etree.XML(res['arch'])
nodes = doc.xpath("//field[@name='survey_id']")
for node in nodes:
node.set('domain', domain)
res['arch'] = etree.tostring(doc)
partner_id = self.pool.get('res.partner').search(cr, uid, [("user_id","=",uid)], context=context)[0]
survey_obj = self.pool.get('survey')
line_ids = survey_obj.search(cr, uid, [('invited_partner_ids.partner_id','in',partner_id)], context=context)
domain = str([('id', 'in', line_ids)])
doc = etree.XML(res['arch'])
nodes = doc.xpath("//field[@name='survey_id']")
for node in nodes:
node.set('domain', domain)
res['arch'] = etree.tostring(doc)
return res
def action_next(self, cr, uid, ids, context=None):