diff --git a/addons/survey/survey.py b/addons/survey/survey.py index a885f4f5d4a..9f1f0bca6e3 100644 --- a/addons/survey/survey.py +++ b/addons/survey/survey.py @@ -153,7 +153,7 @@ class survey(osv.osv): 'view_mode': 'form', 'res_model': 'survey.question.wiz', 'type': 'ir.actions.act_window', - 'target': 'new', + 'target': 'inline', 'name': self.browse(cr, uid, id, context=context).title, 'context': context } @@ -200,7 +200,7 @@ class survey(osv.osv): 'default_use_template': bool(template_id), 'default_template_id': template_id, 'default_composition_mode': 'comment', - 'mark_invoice_as_sent': True, + 'survey_state': survey_browse.state }) return { 'type': 'ir.actions.act_window', diff --git a/addons/survey/wizard/survey_email_compose_message.py b/addons/survey/wizard/survey_email_compose_message.py index 75c29e9b604..a0e3fc9d4ca 100644 --- a/addons/survey/wizard/survey_email_compose_message.py +++ b/addons/survey/wizard/survey_email_compose_message.py @@ -20,12 +20,15 @@ ############################################################################## import re +from urllib import urlencode +from urlparse import urljoin from openerp.osv import osv from openerp.osv import fields from datetime import datetime from openerp.tools.translate import _ import uuid + class survey_mail_compose_message(osv.TransientModel): _name = 'survey.mail.compose.message' _inherit = 'mail.compose.message' @@ -40,7 +43,7 @@ class survey_mail_compose_message(osv.TransientModel): 'survey_mail_compose_message_ir_attachments_rel', 'wizard_id', 'attachment_id', 'Attachments'), 'multi_email': fields.text(string='List of emails', help="This list of emails of recipients will not converted in partner. Emails separated by commas, semicolons or newline."), - 'date_deadline': fields.date(string="Deadline date", help=""), + 'date_deadline': fields.date(string="Deadline date", help="Deadline to complete the survey. If the field is empty, the invitation is still valid."), } #------------------------------------------------------ # Wizard validation and send @@ -55,15 +58,14 @@ class survey_mail_compose_message(osv.TransientModel): emails_split = re.compile(r"[;,\n\r]+") survey_response_obj = self.pool.get('survey.response') partner_obj = self.pool.get('res.partner') - user = self.pool.get('res.users').browse(cr, uid, uid, context=context) + mail_mail_obj = self.pool.get('mail.mail') + mail_message_obj = self.pool.get('mail.message') + base_url = self.pool.get('ir.config_parameter').get_param(cr, uid, 'web.base.url') - def send_mail_survey(wizard, token, partner_id, email): + def create_token_and_send_mail_survey(wizard, token, partner_id, email): """ Create one mail by recipients and replace __URL__ by link with identification token """ - if not partner_id: - partner_id = partner_obj.search(cr, uid, [('email', '=', email)], context=context) - partner_id = partner_id and partner_id[0] or None - + # create response with token survey_response_obj.create(cr, uid, { 'date_deadline': wizard.date_deadline, 'survey_id': wizard.res_id, @@ -75,37 +77,43 @@ class survey_mail_compose_message(osv.TransientModel): 'email': email, }) - post_values = { - 'subject': wizard.subject, - 'body_html': wizard.body.replace("__URL__", "#active_id=%s¶ms=%s" % (wizard.res_id, token)), - 'parent_id': None, - 'partner_ids': partner_id and [partner_id] or None, - 'attachments': attachments, - 'email_from': wizard.email_from or user.partner_id.email or None, - 'email_to': email, - 'notification': False, + # create url + query = { + 'db': cr.dbname } - print "" - print post_values - print "" - - - # # post the message - # active_model_pool.message_post(cr, uid, [res_id], type='comment', subtype='mt_comment', context=context, **post_values) + fragment = { + 'active_id': wizard.res_id, + 'params': token, + 'action': 'survey.action_answer_survey', + } + url = urljoin(base_url, "?%s#%s" % (urlencode(query), urlencode(fragment))) + # post the message + values = { + 'model': 'survey', + 'res_id': wizard.res_id or False, + 'subject': wizard.subject, + 'body': wizard.body.replace("__URL__", url), + 'parent_id': None, + 'partner_ids': partner_id and [(4, partner_id)] or None, + 'notified_partner_ids': partner_id and [(4, partner_id)] or None, + 'attachment_ids': wizard.attachment_ids or None, + 'email_from': wizard.email_from or None, + 'email_to': email, + } + mail_obj = partner_id and mail_message_obj or mail_mail_obj + mail_id = mail_obj.create(cr, uid, values, context=context) + if mail_obj == mail_mail_obj: + mail_obj.send(cr, uid, [mail_id], context=context) for wizard in self.browse(cr, uid, ids, context=context): if wizard.model == 'survey': - - # default values, according to the wizard options - attachments = [(attach.datas_fname or attach.name, base64.b64decode(attach.datas)) for attach in wizard.attachment_ids] - # check if __URL__ is in the text if wizard.body.find("__URL__") < 0: - raise osv.except_osv(_('Warning!'),_("The content of the text don't contain '__URL__'. \ + raise osv.except_osv(_('Warning!'), _("The content of the text don't contain '__URL__'. \ __URL__ is automaticaly converted into the special url of the survey.")) - emails = list(set(emails_split.split( wizard.multi_email or "")) - set([partner.email for partner in wizard.partner_ids])) + emails = list(set(emails_split.split(wizard.multi_email or "")) - set([partner.email for partner in wizard.partner_ids])) # quick check of email list emails_checked = [] @@ -113,17 +121,17 @@ class survey_mail_compose_message(osv.TransientModel): email = email.strip() if email: if not re.search(r"^[^@]+@[^@]+$", email): - raise osv.except_osv(_('Warning!'),_("An email address is incorrect: '%s'" % email)) + raise osv.except_osv(_('Warning!'), _("An email address is incorrect: '%s'" % email)) else: emails_checked.append(email) if not len(emails_checked) and not len(wizard.partner_ids): - raise osv.except_osv(_('Warning!'),_("Please enter at least one recipient.")) + raise osv.except_osv(_('Warning!'), _("Please enter at least one recipient.")) for email in emails_checked: - send_mail_survey(wizard, uuid.uuid4(), None, email) + partner_id = partner_obj.search(cr, uid, [('email', '=', email)], context=context) + partner_id = partner_id and partner_id[0] or None + create_token_and_send_mail_survey(wizard, uuid.uuid4(), partner_id, email) for partner in wizard.partner_ids: - send_mail_survey(wizard, uuid.uuid4(), partner.id, partner.email) + create_token_and_send_mail_survey(wizard, uuid.uuid4(), partner.id, partner.email) - return None return {'type': 'ir.actions.act_window_close'} - diff --git a/addons/survey/wizard/survey_email_compose_message.xml b/addons/survey/wizard/survey_email_compose_message.xml index ca33b28968c..4a8f11aebe2 100644 --- a/addons/survey/wizard/survey_email_compose_message.xml +++ b/addons/survey/wizard/survey_email_compose_message.xml @@ -35,7 +35,7 @@ - +