1 # -*- coding: utf-8 -*-
4 from openerp.tools.translate import _
5 from openerp.addons.web import http
6 from openerp.addons.web.http import request
7 from openerp import SUPERUSER_ID
12 class contactus(http.Controller):
14 def generate_google_map_url(self, street, city, city_zip, country_name):
15 url = "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=8&size=298x298" % werkzeug.url_quote_plus(
16 '%s, %s %s, %s' % (street, city, city_zip, country_name)
20 @http.route(['/page/website.contactus', '/page/contactus'], type='http', auth="public", website=True, multilang=True)
21 def contact(self, **kwargs):
23 for field in ['description', 'partner_name', 'phone', 'contact_name', 'email_from', 'name']:
25 values[field] = kwargs.pop(field)
26 values.update(kwargs=kwargs.items())
27 return request.website.render("website.contactus", values)
29 def create_lead(self, request, values, kwargs):
30 """ Allow to be overrided """
31 return request.registry['crm.lead'].create(request.cr, SUPERUSER_ID, values, request.context)
33 def preRenderThanks(self, request, values, kwargs):
34 """ Allow to be overrided """
35 company = request.website.company_id
37 'google_map_url': self.generate_google_map_url(company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''),
42 @http.route(['/crm/contactus'], type='http', auth="public", website=True)
43 def contactus(self, **kwargs):
44 def dict_to_str(title, dictvar):
45 ret = "\n\n%s" % title
50 _TECHNICAL = ['show_info', 'view_from', 'view_callback'] # Only use for behavior, don't stock it
51 _BLACKLIST = ['id', 'create_uid', 'create_date', 'write_uid', 'write_date', 'user_id', 'active'] # Allow in description
52 _REQUIRED = ['name', 'contact_name', 'email_from', 'description'] # Could be improved including required from model
54 post_file = [] # List of file to add to ir_attachment once we have the ID
55 post_description = [] # Info to add after the message
58 for field_name, field_value in kwargs.items():
59 if hasattr(field_value, 'filename'):
60 post_file.append(field_value)
61 elif field_name in request.registry['crm.lead']._all_columns and field_name not in _BLACKLIST:
62 values[field_name] = field_value
63 elif field_name not in _TECHNICAL: # allow to add some free fields or blacklisted field like ID
64 post_description.append("%s: %s" % (field_name, field_value))
66 if "name" not in kwargs and values.get("contact_name"): # if kwarg.name is empty, it's an error, we cannot copy the contact_name
67 values["name"] = values.get("contact_name")
68 # fields validation : Check that required field from model crm_lead exists
69 error = set(field for field in _REQUIRED if not values.get(field))
71 values = dict(values, error=error)
73 values.update(kwargs=kwargs.items())
74 return request.website.render(kwargs.get("view_from", "website.contactus"), values)
77 values['channel_id'] = request.registry['ir.model.data'].get_object_reference(request.cr, SUPERUSER_ID, 'crm', 'crm_case_channel_website')[1]
78 values['section_id'] = request.registry['ir.model.data'].xmlid_to_res_id(request.cr, SUPERUSER_ID, 'website.salesteam_website_sales')
82 # description is required, so it is always already initialized
84 values['description'] += dict_to_str(_("Custom Fields: "), post_description)
86 if kwargs.get("show_info"):
88 environ = request.httprequest.headers.environ
89 post_description.append("%s: %s" % ("IP", environ.get("REMOTE_ADDR")))
90 post_description.append("%s: %s" % ("USER_AGENT", environ.get("HTTP_USER_AGENT")))
91 post_description.append("%s: %s" % ("ACCEPT_LANGUAGE", environ.get("HTTP_ACCEPT_LANGUAGE")))
92 post_description.append("%s: %s" % ("REFERER", environ.get("HTTP_REFERER")))
93 values['description'] += dict_to_str(_("Environ Fields: "), post_description)
95 lead_id = self.create_lead(request, values, kwargs)
97 for field_value in post_file:
99 'name': field_value.filename,
100 'res_name': field_value.filename,
101 'res_model': 'crm.lead',
103 'datas': base64.encodestring(field_value.read()),
104 'datas_fname': field_value.filename,
106 request.registry['ir.attachment'].create(request.cr, SUPERUSER_ID, attachment_value, context=request.context)
108 values = self.preRenderThanks(request, values, kwargs)
109 return request.website.render(kwargs.get("view_callback", "website_crm.contactus_thanks"), values)