summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@openerp.com>2013-09-02 15:52:10 +0200
committerChristophe Matthieu <chm@openerp.com>2013-09-02 15:52:10 +0200
commit0216d769cb76941bb6fc779f27c82faf11c6ce75 (patch)
treee24144d1a79620e6e080cc56d30f64e16cefc9ec
parente44332e5f7a50302cb1698a3ba8395d242e4d11b (diff)
[IMP] create website_membership
bzr revid: chm@openerp.com-20130902135210-zevplu7bs7w2cpcm
-rw-r--r--addons/website_contract/views/website_contract.xml48
-rw-r--r--addons/website_crm_partner_assign/__openerp__.py4
-rw-r--r--addons/website_crm_partner_assign/views/website_crm_partner_assign.xml5
-rw-r--r--addons/website_membership/__init__.py2
-rw-r--r--addons/website_membership/__openerp__.py18
-rw-r--r--addons/website_membership/controllers/__init__.py1
-rw-r--r--addons/website_membership/controllers/main.py73
-rw-r--r--addons/website_membership/views/website_membership.xml130
-rw-r--r--addons/website_membership/website_membership.py13
9 files changed, 269 insertions, 25 deletions
diff --git a/addons/website_contract/views/website_contract.xml b/addons/website_contract/views/website_contract.xml
index 33b70ed037c..f2e35a5d8fb 100644
--- a/addons/website_contract/views/website_contract.xml
+++ b/addons/website_contract/views/website_contract.xml
@@ -27,30 +27,34 @@
<template id="index" name="References">
<t t-call="website_contract.layout">
<t t-set="ref_content">
- <h1 class="col-md-12 text-center">Customer References</h1>
- <h2 class="col-md-12 text-center">Trusted by millions worldwide</h2>
+ <h1 class="col-md-12 text-center">
+ Customer References<br/>
+ <small>Trusted by millions worldwide</small>
+ </h1>
<div class="col-md-12" id="ref_content">
-
- <t t-call="website.pager">
- <t t-set="classname">pull-left</t>
- </t>
- <form action="/references/" method="get" class="pull-right pagination">
- <div class="form-group">
- <input type="text" name="search" class="search-query form-control" placeholder="Search" t-att-value="searches.get('search') or '' or ''" />
- </div>
- <div class="form-group">
- <select class="search-query form-control" name="country" t-if="len(countries) > 1" onchange="submit()">
- <t t-foreach="countries">
- <t t-if="country_id">
- <option t-att-selected="searches.get('country') == str(country_id and country_id[0]) and 'selected'" t-att-value="country_id[0]">
- <t t-esc="country_id[1]"/> (<t t-esc="country_id_count"/>)
- </option>
- </t>
- </t>
- </select>
+ <div class='navbar'>
+ <div>
+ <t t-call="website.pager">
+ <t t-set="classname">pull-left</t>
+ </t>
+ <form action="/references/" method="get" class="navbar-search pull-right pagination form-inline">
+ <div class="form-group">
+ <input type="text" name="search" class="search-query form-control" placeholder="Search" t-att-value="searches.get('search') or '' or ''" />
+ </div>
+ <div class="form-group">
+ <select class="search-query form-control" name="country" t-if="len(countries) > 1" onchange="submit()">
+ <t t-foreach="countries">
+ <t t-if="country_id">
+ <option t-att-selected="searches.get('country') == str(country_id and country_id[0]) and 'selected'" t-att-value="country_id[0]">
+ <t t-esc="country_id[1]"/> (<t t-esc="country_id_count"/>)
+ </option>
+ </t>
+ </t>
+ </select>
+ </div>
+ </form>
</div>
- </form>
- <div class="clearfix"/>
+ </div>
<div>
<div t-foreach="partner_ids" t-as="partner" class="media thumbnail">
diff --git a/addons/website_crm_partner_assign/__openerp__.py b/addons/website_crm_partner_assign/__openerp__.py
index 0cedea46e0e..bb89be3ecf0 100644
--- a/addons/website_crm_partner_assign/__openerp__.py
+++ b/addons/website_crm_partner_assign/__openerp__.py
@@ -4,8 +4,8 @@
'summary': 'Publish Customer References',
'version': '1.0',
'description': """
-OpenERP Blog
-============
+OpenERP Public Partners References
+==================================
""",
'author': 'OpenERP SA',
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
index c16042a9986..74d30e434f9 100644
--- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml
+++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml
@@ -34,6 +34,9 @@
<div class="col-md-12" id="ref_content">
<div class='navbar'>
<div>
+ <t t-call="website.pager">
+ <t t-set="classname">pull-left</t>
+ </t>
<form action="/partners/" method="get" class="navbar-search pull-right pagination form-inline">
<div class="form-group">
<input type="text" name="search" class="search-query col-md-2 mt4 form-control" placeholder="Search" t-att-value="searches.get('search') or '' or ''"/>
@@ -50,7 +53,7 @@
</select>
</div>
<div class="form-group">
- <select class="search-query col-md-2 mt4 form-control" name="grade" t-if="len(countries) > 1" onchange="submit()">
+ <select class="search-query col-md-2 mt4 form-control" name="grade" t-if="len(grades) > 1" onchange="submit()">
<t t-foreach="grades">
<t t-if="grade_id">
<option t-att-selected="searches.get('grade') == str(grade_id and grade_id[0]) and 'selected'" t-att-value="grade_id[0]">
diff --git a/addons/website_membership/__init__.py b/addons/website_membership/__init__.py
new file mode 100644
index 00000000000..6a3aa370036
--- /dev/null
+++ b/addons/website_membership/__init__.py
@@ -0,0 +1,2 @@
+import controllers
+import website_membership \ No newline at end of file
diff --git a/addons/website_membership/__openerp__.py b/addons/website_membership/__openerp__.py
new file mode 100644
index 00000000000..37ef781f984
--- /dev/null
+++ b/addons/website_membership/__openerp__.py
@@ -0,0 +1,18 @@
+{
+'name': 'Public Partners Members',
+ 'category': 'Website',
+ 'summary': 'Publish Members',
+ 'version': '1.0',
+ 'description': """
+OpenERP Partners Members
+========================
+
+ """,
+ 'author': 'OpenERP SA',
+ 'depends': ['website', 'association'],
+ 'data': [
+ 'views/website_membership.xml',
+ ],
+ 'qweb': ['static/src/xml/*.xml'],
+ 'installable': True,
+}
diff --git a/addons/website_membership/controllers/__init__.py b/addons/website_membership/controllers/__init__.py
new file mode 100644
index 00000000000..8ee9bae18d9
--- /dev/null
+++ b/addons/website_membership/controllers/__init__.py
@@ -0,0 +1 @@
+import main
diff --git a/addons/website_membership/controllers/main.py b/addons/website_membership/controllers/main.py
new file mode 100644
index 00000000000..eeef26a2b03
--- /dev/null
+++ b/addons/website_membership/controllers/main.py
@@ -0,0 +1,73 @@
+# -*- 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(['/members/', '/members/page/<int:page>/'], type='http', auth="public")
+ def members(self, page=0, **post):
+ website = request.registry['website']
+ membership_obj = request.registry['membership.membership_line']
+
+ def dom_without(without):
+ domain = openerp.SUPERUSER_ID != request.uid and [('partner.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("membership_id", "all") != 'all':
+ domain_search["membership"] = [("membership", "=", int(post.get("membership")))]
+
+
+ # public membership
+ membership_ids = membership_obj.search(request.cr, openerp.SUPERUSER_ID, dom_without(False) )
+ memberships = membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids )
+ google_map_partner_ids = ",".join([str(m.partner.id) for m in memberships])
+
+
+ # group by membership_id
+ domain = dom_without("membership")
+ memberships = membership_obj.read_group(request.cr, request.uid, domain, ["id", "membership_id"], groupby="membership_id", orderby="membership_id")
+ memberships.insert(0, {'membership_id_count': membership_obj.search(request.cr, request.uid, domain, count=True), 'membership_id': ("all", _("All Groups"))})
+
+
+ step = 20
+ pager = website.pager(url="/members/", total=len(membership_ids), page=page, step=step, scope=7, url_args=post)
+ membership_ids = membership_obj.search(request.cr, openerp.SUPERUSER_ID, [('id', 'in', membership_ids)],
+ limit=step, offset=pager['offset'], order="membership_id ASC,date DESC")
+
+
+ values = website.get_rendering_context({
+ 'memberships': memberships,
+ 'membership_line_ids': membership_obj.browse(request.cr, openerp.SUPERUSER_ID, membership_ids),
+ 'google_map_partner_ids': google_map_partner_ids,
+ 'pager': pager,
+ 'searches': post,
+ 'search_path': "?%s" % urllib.urlencode(post),
+ })
+ return website.render("website_membership.index", values)
+
+ @http.route(['/members/<int:ref_id>/'], 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_membership.details", values)
+
diff --git a/addons/website_membership/views/website_membership.xml b/addons/website_membership/views/website_membership.xml
new file mode 100644
index 00000000000..cac894c9247
--- /dev/null
+++ b/addons/website_membership/views/website_membership.xml
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+<data>
+
+
+ <!-- Layout add nav and footer -->
+
+ <template id="footer_custom" inherit_id="website.layout" name="Custom Footer">
+ <xpath expr="//body/footer//a[@href='/page/website.aboutus']" position="after">
+ <li><a href="/members/">Members</a></li>
+ </xpath>
+ </template>
+
+ <!-- Page -->
+
+ <template id="layout" name="Members Layout">
+ <t t-call="website.layout">
+ <t t-set="title">Partners</t>
+ <div class="container">
+ <div class="row">
+ <t t-raw="ref_content" />
+ </div>
+ </div>
+ </t>
+ </template>
+
+ <template id="index" name="Members">
+ <t t-call="website_membership.layout">
+ <t t-set="ref_content">
+ <h1 class="col-md-12 text-center">
+ Members<br/>
+ <small>members sub title</small>
+ </h1>
+ <div class="col-md-12" id="ref_content">
+ <div class='navbar'>
+ <div>
+ <t t-call="website.pager">
+ <t t-set="classname">pull-left</t>
+ </t>
+ <form action="/members/" method="get" class="navbar-search pull-right pagination form-inline">
+ <div class="form-group">
+ <input type="text" name="search" class="search-query col-md-2 mt4 form-control" placeholder="Search" t-att-value="searches.get('search') or '' or ''"/>
+ </div>
+ <div class="form-group">
+ <select class="search-query col-md-2 mt4 form-control" name="membership" t-if="len(memberships) > 1" onchange="submit()">
+ <t t-foreach="memberships">
+ <t t-if="membership_id">
+ <option t-att-selected="searches.get('membership') == str(membership_id and membership_id[0]) and 'selected'" t-att-value="membership_id[0]">
+ <t t-esc="membership_id[1]"/> (<t t-esc="membership_id_count"/>)
+ </option>
+ </t>
+ </t>
+ </select>
+ </div>
+ </form>
+ </div>
+ </div>
+ <div>
+ <t t-foreach="membership_line_ids" t-as="membership_line_id">
+ <t t-if="membership != membership_line_id.membership_id.id">
+ <t t-set="membership" t-value="membership_line_id.membership_id.id"/>
+ <h3 class="text-center well"><span t-field="membership_line_id.membership_id"/></h3>
+ </t>
+ <t t-set="partner" t-value="membership_line_id.partner"/>
+ <div class="media thumbnail">
+ <a class="pull-left" t-attf-href="/members/#{ partner.id }/">
+ <img class="media-object" t-att-src="partner.img('image_small')"/>
+ </a>
+ <div class="media-body">
+ <t t-call="website.publish"><t t-set="object" t-value="partner"/></t>
+ <a class="media-heading" t-attf-href="/members/#{ partner.id }/"><span t-field="partner.parent_id"/> <span t-field="partner.name"/></a> - <span t-field="membership_line_id.membership_id"/>
+ <div t-field="partner.website_short_description"/>
+ </div>
+ </div>
+ </t>
+ </div>
+ </div>
+ </t>
+ </t>
+ </template>
+
+ <template id="ref_country" inherit_id="website_membership.index" inherit_option_id="website_membership.index" name="Left World Map">
+ <xpath expr="//div[@id='ref_content']" position="before">
+ <div class="col-md-4">
+ <ul class="nav">
+ <li class="navbar-header">World Map</li>
+ <iframe t-attf-src="/google_map/?width=320&amp;height=240&amp;partner_ids=#{ google_map_partner_ids }&amp;partner_url=/members/"
+ style="width:320px; height:260px; border:0; padding:0; margin:0;"></iframe>
+ </ul>
+ </div>
+ </xpath>
+ <xpath expr="//div[@id='ref_content']" position="attributes">
+ <attribute name="class">col-md-8</attribute>
+ </xpath>
+ </template>
+
+ <template id="details" name="Member Detail">
+ <t t-call="website_membership.layout">
+ <t t-set="ref_content">
+ <t t-call="website.publish"><t t-set="object" t-value="partner_id"/></t>
+ <h1 class="col-md-12 text-center" t-field="partner_id.name"/>
+ <div class="col-md-4">
+ <div class="text-center">
+ <img t-att-src="partner_id.img('image_medium')"/>
+ </div>
+ <address>
+ <table style="margin: auto;" class="well">
+ <colgroup>
+ <col width="100"/>
+ <col/>
+ </colgroup>
+ <tbody>
+ <t t-set="address" t-value="'&lt;br/&gt;'.join(partner_id.name_get()[0][1].split('\n')[1:])"/>
+ <tr t-if="address or editable"><th>Address</th><td class="span2" t-raw="address"/></tr>
+ <tr t-if="partner_id.website or editable"><th>Website</th><td class="span2" t-field="partner_id.website"/></tr>
+ <tr t-if="partner_id.phone or editable"><th>Tel</th><td class="span2" t-field="partner_id.phone"/></tr>
+ <tr t-if="partner_id.mobile or editable"><th>Tel</th><td class="span2" t-field="partner_id.mobile"/></tr>
+ <tr t-if="partner_id.fax or editable"><th>Fax</th><td class="span2" t-field="partner_id.fax"/></tr>
+ <tr t-if="partner_id.email or editable"><th>Email</th><td class="span2" t-field="partner_id.email"/></tr>
+ </tbody>
+ </table>
+ </address>
+ </div>
+ <div class="col-md-8 mt32" t-field="partner_id.website_description"/>
+ </t>
+ </t>
+ </template>
+
+ </data>
+</openerp>
diff --git a/addons/website_membership/website_membership.py b/addons/website_membership/website_membership.py
new file mode 100644
index 00000000000..1d89a2bdf4e
--- /dev/null
+++ b/addons/website_membership/website_membership.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])