diff options
| author | Christophe Matthieu <chm@openerp.com> | 2013-09-02 15:52:10 +0200 |
|---|---|---|
| committer | Christophe Matthieu <chm@openerp.com> | 2013-09-02 15:52:10 +0200 |
| commit | 0216d769cb76941bb6fc779f27c82faf11c6ce75 (patch) | |
| tree | e24144d1a79620e6e080cc56d30f64e16cefc9ec | |
| parent | e44332e5f7a50302cb1698a3ba8395d242e4d11b (diff) | |
[IMP] create website_membership
bzr revid: chm@openerp.com-20130902135210-zevplu7bs7w2cpcm
| -rw-r--r-- | addons/website_contract/views/website_contract.xml | 48 | ||||
| -rw-r--r-- | addons/website_crm_partner_assign/__openerp__.py | 4 | ||||
| -rw-r--r-- | addons/website_crm_partner_assign/views/website_crm_partner_assign.xml | 5 | ||||
| -rw-r--r-- | addons/website_membership/__init__.py | 2 | ||||
| -rw-r--r-- | addons/website_membership/__openerp__.py | 18 | ||||
| -rw-r--r-- | addons/website_membership/controllers/__init__.py | 1 | ||||
| -rw-r--r-- | addons/website_membership/controllers/main.py | 73 | ||||
| -rw-r--r-- | addons/website_membership/views/website_membership.xml | 130 | ||||
| -rw-r--r-- | addons/website_membership/website_membership.py | 13 |
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&height=240&partner_ids=#{ google_map_partner_ids }&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="'<br/>'.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]) |
