From 9d93cd3958a204df31bf3cad0c629a971471ffd7 Mon Sep 17 00:00:00 2001 From: Christophe Matthieu Date: Thu, 29 Aug 2013 15:00:40 +0200 Subject: [PATCH] [IMP] website_crm_partner_assign: create module: list of partner with a grade bzr revid: chm@openerp.com-20130829130040-s4kyjakzwrmc9pt9 --- addons/website_contract/controllers/main.py | 16 ++- addons/website_contract/website_contract.py | 1 - addons/website_crm_partner_assign/__init__.py | 2 + .../website_crm_partner_assign/__openerp__.py | 18 +++ .../controllers/__init__.py | 1 + .../controllers/main.py | 80 +++++++++++ .../views/website_crm_partner_assign.xml | 126 ++++++++++++++++++ .../website_crm_partner_assign.py | 13 ++ 8 files changed, 250 insertions(+), 7 deletions(-) create mode 100644 addons/website_crm_partner_assign/__init__.py create mode 100644 addons/website_crm_partner_assign/__openerp__.py create mode 100644 addons/website_crm_partner_assign/controllers/__init__.py create mode 100644 addons/website_crm_partner_assign/controllers/main.py create mode 100644 addons/website_crm_partner_assign/views/website_crm_partner_assign.xml create mode 100644 addons/website_crm_partner_assign/website_crm_partner_assign.py diff --git a/addons/website_contract/controllers/main.py b/addons/website_contract/controllers/main.py index 359f2a2299e..af600cf1311 100644 --- a/addons/website_contract/controllers/main.py +++ b/addons/website_contract/controllers/main.py @@ -14,24 +14,28 @@ class website_contract(http.Controller): partner_obj = request.registry['res.partner'] account_obj = request.registry['account.analytic.account'] - domain = [] + # check contracts + contract_ids = account_obj.search(request.cr, openerp.SUPERUSER_ID, [(1, "=", 1)]) + contract_project_ids = [contract.partner_id.id + for contract in account_obj.browse(request.cr, openerp.SUPERUSER_ID, contract_ids) if contract.partner_id] + domain = ['|', ('id', "in", contract_project_ids), ('id', "child_of", contract_project_ids)] + if post.get('search'): domain += ['|', ('name', 'ilike', "%%%s%%" % post.get("search")), ('website_description', 'ilike', "%%%s%%" % post.get("search"))] + # public partner profile partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, domain + [('website_published', '=', True)]) worldmap_partner_ids = ",".join([str(p) for p in partner_ids]) if request.uid != website.get_public_user().id: - contract_ids = account_obj.search(request.cr, openerp.SUPERUSER_ID, [(1, "=", 1)]) - contract_project_ids = [contract.partner_id.id - for contract in account_obj.browse(request.cr, openerp.SUPERUSER_ID, contract_ids) if contract.partner_id] - # search for check access rules - partner_ids += partner_obj.search(request.cr, request.uid, domain + ['|', ('id', "in", contract_project_ids), ('id', "child_of", contract_project_ids)]) + # search without website_published + partner_ids += partner_obj.search(request.cr, request.uid, domain) partner_ids = list(set(partner_ids)) + # group by country countries = partner_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id") countries.insert(0, {'country_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))}) diff --git a/addons/website_contract/website_contract.py b/addons/website_contract/website_contract.py index 1eab700456d..1d89a2bdf4e 100644 --- a/addons/website_contract/website_contract.py +++ b/addons/website_contract/website_contract.py @@ -5,7 +5,6 @@ from openerp.osv import osv, fields class res_partner(osv.osv): _inherit = 'res.partner' _columns = { - 'website_published': fields.boolean('Available in the website'), 'website_description': fields.html('Description for the website'), 'website_short_description': fields.text('Sort description for the website'), } diff --git a/addons/website_crm_partner_assign/__init__.py b/addons/website_crm_partner_assign/__init__.py new file mode 100644 index 00000000000..8fddc880d43 --- /dev/null +++ b/addons/website_crm_partner_assign/__init__.py @@ -0,0 +1,2 @@ +import controllers +import website_crm_partner_assign \ No newline at end of file diff --git a/addons/website_crm_partner_assign/__openerp__.py b/addons/website_crm_partner_assign/__openerp__.py new file mode 100644 index 00000000000..6dd9b5b5726 --- /dev/null +++ b/addons/website_crm_partner_assign/__openerp__.py @@ -0,0 +1,18 @@ +{ +'name': 'Public Partners References', + 'category': 'Website', + 'summary': 'Publish Customer References', + 'version': '1.0', + 'description': """ +OpenERP Blog +============ + + """, + 'author': 'OpenERP SA', + 'depends': ['website', 'website_worldmap'], + 'data': [ + 'views/website_crm_partner_assign.xml', + ], + 'qweb': ['static/src/xml/*.xml'], + 'installable': True, +} diff --git a/addons/website_crm_partner_assign/controllers/__init__.py b/addons/website_crm_partner_assign/controllers/__init__.py new file mode 100644 index 00000000000..8ee9bae18d9 --- /dev/null +++ b/addons/website_crm_partner_assign/controllers/__init__.py @@ -0,0 +1 @@ +import main diff --git a/addons/website_crm_partner_assign/controllers/main.py b/addons/website_crm_partner_assign/controllers/main.py new file mode 100644 index 00000000000..fb9fe9f9f0d --- /dev/null +++ b/addons/website_crm_partner_assign/controllers/main.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +import openerp +from openerp.addons.web import http +from openerp.tools.translate import _ +from openerp.addons.web.http import request +import urllib + +class website_crm_partner_assign(http.Controller): + + @http.route(['/partners/', '/partners/page//'], type='http', auth="public") + def partners(self, page=0, **post): + website = request.registry['website'] + partner_obj = request.registry['res.partner'] + + def dom_without(without): + domain = [('grade_id', '!=', False)] + domain += openerp.SUPERUSER_ID != request.uid and [('website_published', '=', True)] or [(1, "=", 1)] + for key, search in domain_search.items(): + if key != without: + domain += search + return domain + + # search domains + domain_search = {} + if post.get('search'): + domain_search["search"] += ['|', + ('name', 'ilike', "%%%s%%" % post.get("search")), + ('website_description', 'ilike', "%%%s%%" % post.get("search"))] + if post.get("grade", "all") != 'all': + domain_search["grade"] = [("grade_id", "=", int(post.get("grade")))] + if post.get("country", "all") != 'all': + domain_search["country"] = [("country_id", "=", int(post.get("country")))] + + + # public partner profile + partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, dom_without(False) ) + worldmap_partner_ids = ",".join([str(p) for p in partner_ids]) + + + # group by country + domain = dom_without("country") + countries = partner_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id") + countries.insert(0, {'country_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))}) + + # group by grade + domain = dom_without("grade") + grades = partner_obj.read_group(request.cr, request.uid, domain, ["id", "grade_id"], groupby="grade_id", orderby="grade_id") + grades.insert(0, {'grade_id_count': partner_obj.search(request.cr, request.uid, domain, count=True), 'grade_id': ("all", _("All Grade"))}) + + + step = 20 + pager = website.pager(url="/partners/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post) + partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)], limit=step, offset=pager['offset']) + + + values = website.get_rendering_context({ + 'countries': countries, + 'grades': grades, + 'partner_ids': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids), + 'worldmap_partner_ids': worldmap_partner_ids, + 'pager': pager, + 'searches': post, + 'search_path': "?%s" % urllib.urlencode(post), + }) + return website.render("website_crm_partner_assign.index", values) + + @http.route(['/partners//'], type='http', auth="public") + def partners_ref(self, ref_id=0, **post): + website = request.registry['website'] + partner_obj = request.registry['res.partner'] + partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)]) + if request.uid != website.get_public_user().id: + partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)]) + + values = website.get_rendering_context({ + 'partner_id': partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids[0], context={'show_address': True}), + }) + return website.render("website_crm_partner_assign.details", values) + diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml new file mode 100644 index 00000000000..43987ed06ed --- /dev/null +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml @@ -0,0 +1,126 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/addons/website_crm_partner_assign/website_crm_partner_assign.py b/addons/website_crm_partner_assign/website_crm_partner_assign.py new file mode 100644 index 00000000000..1d89a2bdf4e --- /dev/null +++ b/addons/website_crm_partner_assign/website_crm_partner_assign.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + +from openerp.osv import osv, fields + +class res_partner(osv.osv): + _inherit = 'res.partner' + _columns = { + 'website_description': fields.html('Description for the website'), + 'website_short_description': fields.text('Sort description for the website'), + } + + def img(self, cr, uid, ids, field='image_small', context=None): + return "/website/image?model=%s&field=%s&id=%s" % (self._name, field, ids[0])