e7e53378c5122cb14fae404426c93dafe51fe5bb
[odoo/odoo.git] / addons / website_customer / controllers / main.py
1 # -*- coding: utf-8 -*-
2
3 import openerp
4 from openerp import SUPERUSER_ID
5 from openerp.addons.web import http
6 from openerp.tools.translate import _
7 from openerp.addons.web.http import request
8 from openerp.addons.website_partner.controllers import main as website_partner
9 import werkzeug.urls
10
11
12 class WebsiteCustomer(http.Controller):
13     _references_per_page = 20
14
15     @http.route([
16         '/customers/',
17         '/customers/page/<int:page>/',
18         '/customers/country/<int:country_id>',
19         '/customers/country/<country_name>-<int:country_id>',
20         '/customers/country/<int:country_id>/page/<int:page>/',
21         '/customers/country/<country_name>-<int:country_id>/page/<int:page>/',
22     ], type='http', auth="public", website=True, multilang=True)
23     def customers(self, country_id=0, page=0, **post):
24         cr, uid, context = request.cr, request.uid, request.context
25         partner_obj = request.registry['res.partner']
26         partner_name = post.get('search', '')
27
28         base_domain = [('website_published','=',True)]
29         domain = list(base_domain)
30         if partner_name:
31             domain += [
32                 '|',
33                 ('name', 'ilike', "%%%s%%" % post.get("search")),
34                 ('website_description', 'ilike', "%%%s%%" % post.get("search"))
35             ]
36         country_id = None
37         if country_id:
38             domain += [('country_id', '=', country_id)]
39
40         # group by country, based on all customers (base domain)
41         countries = partner_obj.read_group(
42             cr, openerp.SUPERUSER_ID, base_domain, ["id", "country_id"],
43             groupby="country_id", orderby="country_id", context=request.context)
44         country_count = partner_obj.search(
45             cr, openerp.SUPERUSER_ID, base_domain, count=True, context=request.context)
46         countries.insert(0, {
47             'country_id_count': country_count,
48             'country_id': (0, _("All Countries"))
49         })
50
51         # search customers to display
52         partner_ids = partner_obj.search(cr, openerp.SUPERUSER_ID, domain, context=request.context)
53         google_map_partner_ids = ",".join([str(p) for p in partner_ids])
54
55         # pager
56         pager = request.website.pager(
57             url="/customers/", total=len(partner_ids), page=page, step=self._references_per_page,
58             scope=7, url_args=post
59         )
60
61         # browse page of customers to display
62         partner_ids = partner_obj.search(
63             cr, openerp.SUPERUSER_ID, domain,
64             limit=self._references_per_page, offset=pager['offset'], context=context)
65         partners_data = partner_obj.read(
66             request.cr, openerp.SUPERUSER_ID, partner_ids, request.website.get_partner_white_list_fields(), context=request.context)
67         values = {
68             'countries': countries,
69             'current_country_id': country_id or 0,
70             'partners_data': partners_data,
71             'google_map_partner_ids': google_map_partner_ids,
72             'pager': pager,
73             'post': post,
74             'search_path': "?%s" % werkzeug.url_encode(post),
75         }
76         return request.website.render("website_customer.index", values)
77
78     @http.route(['/customers/<int:partner_id>/', '/customers/<partner_name>-<int:partner_id>/'], type='http', auth="public", website=True, multilang=True)
79     def customer(self, partner_id, **post):
80         partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
81         values = website_partner.get_partner_template_value(partner)
82         if not values:
83             return self.customers(**post)
84
85         partner_obj = request.registry['res.partner']
86         if values['partner_data'].get('assigned_partner_id', None):
87             values['assigned_partner_data'] = partner_obj.read(
88                 request.cr, openerp.SUPERUSER_ID, [values['partner_data']['assigned_partner_id'][0]],
89                 request.website.get_partner_white_list_fields(), context=request.context)[0]
90         if values['partner_data'].get('implemented_partner_ids', None):
91             implemented_partners_data = partner_obj.read(
92                 request.cr, openerp.SUPERUSER_ID, values['partner_data']['implemented_partner_ids'],
93                 request.website.get_partner_white_list_fields(), context=request.context)
94             values['implemented_partners_data'] = []
95             for data in implemented_partners_data:
96                 if data.get('website_published'):
97                     values['implemented_partners_data'].append(data)
98
99         values['main_object'] = values['partner']
100         return request.website.render("website_customer.details", values)