[MERGE] upstream
This commit is contained in:
commit
c321b3f2f7
|
@ -977,7 +977,7 @@ class crm_lead(format_address, osv.osv):
|
|||
if obj.type == 'opportunity':
|
||||
model, view_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'crm', 'crm_case_form_view_oppor')
|
||||
else:
|
||||
view_id = super(crm_lead, self).get_formview_id(cr, uid, id, model='crm.lead', context=context)
|
||||
view_id = super(crm_lead, self).get_formview_id(cr, uid, id, context=context)
|
||||
return view_id
|
||||
|
||||
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
|
||||
|
|
|
@ -21,12 +21,11 @@
|
|||
</group>
|
||||
<group>
|
||||
<div class="oe_right oe_button_box" name="buttons">
|
||||
<button string="Edit Template" name="action_edit_html" type="object"/>
|
||||
<button name="%(email_template.wizard_email_template_preview)d" string="Preview"
|
||||
type="action" target="new"
|
||||
context="{'template_id':active_id}"/>
|
||||
<br />
|
||||
<!-- <field name="website_link" widget='html' radonly='1'
|
||||
style='margin: 0px; padding: 0px;'/> -->
|
||||
</div>
|
||||
</group>
|
||||
</group>
|
||||
|
|
|
@ -41,6 +41,9 @@ class CrawlSuite(unittest2.TestSuite):
|
|||
starting the crawl
|
||||
"""
|
||||
|
||||
at_install = False
|
||||
post_install = True
|
||||
|
||||
def __init__(self, user=None, password=None):
|
||||
super(CrawlSuite, self).__init__()
|
||||
|
||||
|
@ -108,14 +111,23 @@ class CrawlSuite(unittest2.TestSuite):
|
|||
for link in doc.xpath('//a[@href]'):
|
||||
href = link.get('href')
|
||||
|
||||
parts = urlparse.urlsplit(href)
|
||||
# href with any fragment removed
|
||||
href = urlparse.urlunsplit((
|
||||
parts.scheme,
|
||||
parts.netloc,
|
||||
parts.path,
|
||||
parts.query,
|
||||
''
|
||||
))
|
||||
|
||||
# avoid repeats, even for links we won't crawl no need to
|
||||
# bother splitting them if we've already ignored them
|
||||
# previously
|
||||
if href in seen: continue
|
||||
seen.add(href)
|
||||
|
||||
parts = urlparse.urlsplit(href)
|
||||
|
||||
# FIXME: handle relative link (not parts.path.startswith /)
|
||||
if parts.netloc or \
|
||||
not parts.path.startswith('/') or \
|
||||
parts.path == '/web' or\
|
||||
|
|
|
@ -30,11 +30,12 @@
|
|||
},
|
||||
}),
|
||||
edit: function () {
|
||||
var self = this;
|
||||
$('.popover').remove();
|
||||
this._super();
|
||||
var vHeight = $(window).height();
|
||||
$('body').on('click','#change_cover',_.bind(this.change_bg,{},vHeight));
|
||||
$('body').on('click', '#clear_cover',_.bind(this.clean_bg,{},vHeight));
|
||||
$('body').on('click','#change_cover',_.bind(this.change_bg, self.rte.editor, vHeight));
|
||||
$('body').on('click', '#clear_cover',_.bind(this.clean_bg, self.rte.editor, vHeight));
|
||||
},
|
||||
save : function() {
|
||||
var res = this._super();
|
||||
|
@ -51,12 +52,12 @@
|
|||
},
|
||||
change_bg : function(vHeight) {
|
||||
var self = this;
|
||||
var editor = new website.editor.ImageDialog();
|
||||
editor.on('start', self, function (o) {
|
||||
o.url = $('.js_fullheight').length ? $('.js_fullheight').css('background-image').replace(/url\(|\)|"|'/g,'') : '';
|
||||
});
|
||||
editor.on('save', self, function (o) {
|
||||
$('.js_fullheight').css({"background-image": o.url && o.url !== "" ? 'url(' + o.url + ')' : "", 'min-height': vHeight})
|
||||
var element = new CKEDITOR.dom.element(self.element.find('.cover-storage').$[0]);
|
||||
var editor = new website.editor.MediaDialog(self, element);
|
||||
$(document.body).on('media-saved', self, function (o) {
|
||||
var url = $('.cover-storage').attr('src');
|
||||
$('.js_fullheight').css({"background-image": !_.isUndefined(url) ? 'url(' + url + ')' : "", 'min-height': vHeight});
|
||||
$('.cover-storage').remove();
|
||||
});
|
||||
editor.appendTo('body');
|
||||
},
|
||||
|
|
|
@ -49,7 +49,7 @@
|
|||
<t t-foreach="posts" t-as="post">
|
||||
<div class="col-md-4">
|
||||
<h4>
|
||||
<a t-attf-href="#{blog_url('', ['blogpost'], blogpost=post)}" t-field="post.name"></a>
|
||||
<a t-attf-href="#{blog_url('', ['blog', 'post'], blog=post.blog_id, post=post)}" t-field="post.name"></a>
|
||||
<span t-if="not post.website_published" class="text-warning">
|
||||
&nbsp;
|
||||
<span class="fa fa-warning" title="Not published"/>
|
||||
|
@ -187,6 +187,7 @@
|
|||
<span class="fa fa-times"/>
|
||||
</a>
|
||||
</div>
|
||||
<div class="cover-storage oe_hidden"></div>
|
||||
<t t-call="website.publish_management">
|
||||
<t t-set="object" t-value="blog_post"/>
|
||||
<t t-set="publish_edit" t-value="True"/>
|
||||
|
|
|
@ -23,38 +23,29 @@ class contactus(http.Controller):
|
|||
if kwargs.get(field):
|
||||
values[field] = kwargs.pop(field)
|
||||
values.update(kwargs=kwargs.items())
|
||||
print values
|
||||
return request.website.render("website.contactus", values)
|
||||
|
||||
@http.route(['/crm/contactus'], type='http', auth="public", website=True, multilang=True)
|
||||
def contactus(self, description=None, partner_name=None, phone=None, contact_name=None, email_from=None, name=None, **kwargs):
|
||||
post = {}
|
||||
post['description'] = description
|
||||
post['partner_name'] = partner_name
|
||||
post['phone'] = phone
|
||||
post['contact_name'] = contact_name
|
||||
post['email_from'] = email_from
|
||||
post['name'] = name
|
||||
|
||||
required_fields = ['contact_name', 'email_from', 'description']
|
||||
error = set()
|
||||
values = dict((key, post.get(key)) for key in post)
|
||||
values['error'] = error
|
||||
post = {
|
||||
'description': description,
|
||||
'partner_name': partner_name,
|
||||
'phone': phone,
|
||||
'contact_name': contact_name,
|
||||
'email_from': email_from,
|
||||
'name': name or contact_name,
|
||||
'user_id': False,
|
||||
}
|
||||
|
||||
# fields validation
|
||||
for field in required_fields:
|
||||
if not post.get(field):
|
||||
error.add(field)
|
||||
error = set(field for field in ['contact_name', 'email_from', 'description']
|
||||
if not post.get(field))
|
||||
|
||||
values = dict(post, error=error)
|
||||
if error:
|
||||
values.update(kwargs=kwargs.items())
|
||||
return request.website.render("website.contactus", values)
|
||||
|
||||
# if not given: subject is contact name
|
||||
if not post.get('name'):
|
||||
post['name'] = post.get('contact_name')
|
||||
|
||||
post['user_id'] = False
|
||||
|
||||
try:
|
||||
post['channel_id'] = request.registry['ir.model.data'].get_object_reference(request.cr, SUPERUSER_ID, 'crm', 'crm_case_channel_website')[1]
|
||||
except ValueError:
|
||||
|
|
|
@ -10,6 +10,7 @@ Publish and Assign Partner
|
|||
'author': 'OpenERP SA',
|
||||
'depends': ['crm_partner_assign','website_partner', 'website_google_map'],
|
||||
'data': [
|
||||
'views/partner_grade.xml',
|
||||
'views/website_crm_partner_assign.xml',
|
||||
],
|
||||
'qweb': ['static/src/xml/*.xml'],
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
import werkzeug
|
||||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.addons.web import http
|
||||
from openerp.tools.translate import _
|
||||
from openerp.addons.web.http import request
|
||||
|
@ -23,21 +22,21 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
'/partners/country/<country_name>-<int:country_id>',
|
||||
'/partners/country/<int:country_id>/page/<int:page>',
|
||||
'/partners/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
|
||||
|
||||
'/partners/grade/<int:grade_id>/country/<int:country_id>',
|
||||
'/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>',
|
||||
'/partners/grade/<int:grade_id>/country/<int:country_id>/page/<int:page>',
|
||||
'/partners/grade/<int:grade_id>/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
|
||||
|
||||
], type='http', auth="public", website=True, multilang=True)
|
||||
def partners(self, country_id=0, grade_id=0, page=0, **post):
|
||||
def partners(self, country_id=0, grade_id=0, page=0, country_name='', **post):
|
||||
country_obj = request.registry['res.country']
|
||||
partner_obj = request.registry['res.partner']
|
||||
post_name = post.get('search', '')
|
||||
country = None
|
||||
|
||||
# format displayed membership lines domain
|
||||
base_partner_domain = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True)]
|
||||
base_partner_domain = [('is_company', '=', True), ('grade_id.website_published', '=', True), ('website_published', '=', True)]
|
||||
partner_domain = list(base_partner_domain)
|
||||
if post_name:
|
||||
partner_domain += ['|', ('name', 'ilike', post_name), ('website_description', 'ilike', post_name)]
|
||||
|
@ -51,7 +50,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
countries_partners = partner_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_domain,
|
||||
context=request.context, count=True)
|
||||
|
||||
|
||||
if country_id:
|
||||
country = country_obj.browse(request.cr, request.uid, country_id, request.context)
|
||||
partner_domain += [('country_id', '=', country_id)]
|
||||
|
@ -61,33 +60,29 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
'country_id': (country_id, country.name)
|
||||
})
|
||||
countries.sort(key=lambda d: d['country_id'][1])
|
||||
|
||||
|
||||
countries.insert(0, {
|
||||
'country_id_count': countries_partners,
|
||||
'country_id': (0, _("All Countries"))
|
||||
})
|
||||
|
||||
|
||||
# format pager
|
||||
partner_ids = partner_obj.search(
|
||||
partner_count = partner_obj.search_count(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_domain,
|
||||
context=request.context)
|
||||
pager = request.website.pager(url="/partners", total=len(partner_ids), page=page, step=self._references_per_page, scope=7, url_args=post)
|
||||
pager = request.website.pager(url="/partners", total=partner_count, page=page, step=self._references_per_page, scope=7, url_args=post)
|
||||
|
||||
# search for partners to display
|
||||
partners_data = partner_obj.search_read(request.cr, openerp.SUPERUSER_ID,
|
||||
domain=partner_domain,
|
||||
fields=request.website.get_partner_white_list_fields(),
|
||||
offset=pager['offset'],
|
||||
limit=self._references_per_page,
|
||||
order="grade_id DESC,partner_weight DESC",
|
||||
context=request.context)
|
||||
google_map_partner_ids = ",".join([str(p['id']) for p in partners_data])
|
||||
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, partner_domain,
|
||||
offset=pager['offset'], limit=self._references_per_page,
|
||||
order="grade_id DESC, partner_weight DESC",
|
||||
context=request.context)
|
||||
google_map_partner_ids = ','.join(map(str, partner_ids))
|
||||
partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids, request.context)
|
||||
|
||||
# group by grade
|
||||
grades = partner_obj.read_group(
|
||||
request.cr, openerp.SUPERUSER_ID, base_partner_domain, ["id", "grade_id"],
|
||||
groupby="grade_id", orderby="grade_id", context=request.context)
|
||||
groupby="grade_id", orderby="grade_id DESC", context=request.context)
|
||||
grades_partners = partner_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID, base_partner_domain,
|
||||
context=request.context, count=True)
|
||||
|
@ -102,7 +97,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
'current_country': country,
|
||||
'grades': grades,
|
||||
'grade_id': grade_id,
|
||||
'partners_data': partners_data,
|
||||
'partners': partners,
|
||||
'google_map_partner_ids': google_map_partner_ids,
|
||||
'pager': pager,
|
||||
'searches': post,
|
||||
|
@ -111,9 +106,8 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
return request.website.render("website_crm_partner_assign.index", values)
|
||||
|
||||
@http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
|
||||
def partners_ref(self, partner_id, **post):
|
||||
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
|
||||
values = website_partner.get_partner_template_value(partner)
|
||||
def partners_ref(self, partner_id, partner_name='', **post):
|
||||
values = website_partner.get_partner_template_value(partner_id)
|
||||
if not values:
|
||||
return self.partners(**post)
|
||||
values['main_object'] = values['partner']
|
||||
|
|
|
@ -1,2 +1 @@
|
|||
import res_partner
|
||||
import website
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp.osv import osv, fields
|
||||
|
||||
class res_partner_grade(osv.osv):
|
||||
_inherit = 'res.partner.grade'
|
||||
_columns = {
|
||||
'website_description': fields.html('Description for the website'),
|
||||
'website_published': fields.boolean('Published On Website'),
|
||||
}
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from openerp.osv import orm
|
||||
|
||||
|
||||
class Website(orm.Model):
|
||||
_inherit = 'website'
|
||||
|
||||
def get_partner_white_list_fields(self, cr, uid, ids, context=None):
|
||||
fields = super(Website, self).get_partner_white_list_fields(cr, uid, ids, context=context)
|
||||
fields += ["grade_id"]
|
||||
return fields
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
|
||||
<record model="ir.ui.view" id="partner_grade_view">
|
||||
<field name="name">res.partner.grade.website</field>
|
||||
<field name="model">res.partner.grade</field>
|
||||
<field name="inherit_id" ref="crm_partner_assign.view_partner_grade_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="active" position="after">
|
||||
<field name="website_published"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
@ -81,27 +81,28 @@
|
|||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<t t-if="not partners_data">
|
||||
<p>No result found.</p>
|
||||
</t>
|
||||
<t t-foreach="partners_data" t-as="partner_data">
|
||||
<t t-if="internal_gid != partner_data['grade_id'][1]">
|
||||
<p t-if="not partners">No result found</p>
|
||||
<t t-foreach="partners" t-as="partner">
|
||||
<t t-if="last_grade != partner.grade_id.id">
|
||||
<h3 class="text-center">
|
||||
<span t-esc="partner_data['grade_id'][1]"/> Partners
|
||||
<t t-if="current_country"> in <t t-esc="current_country.name"/></t>
|
||||
<span t-field="partner.grade_id"/> Partners
|
||||
</h3>
|
||||
<t t-set="internal_gid" t-value="partner_data['grade_id'][1]"/>
|
||||
<t t-set="last_grade" t-value="partner.grade_id.id"/>
|
||||
</t>
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
|
||||
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data['image_small']}"/>
|
||||
</a>
|
||||
<a class="pull-left" t-attf-href="/partners/#{slug(partner)}"
|
||||
t-field="partner.image_small"
|
||||
t-field-options='{"widget": "image", "class": "media-object"}'
|
||||
></a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/partners/#{ slug([partner_data.get('id'), partner_data.get('name')]) }"><t t-if="partner_data['parent_id']"><span t-esc="partner_data['parent_id'][1]"/></t> <span t-esc="partner_data['name']"/></a> - <span t-esc="partner_data['grade_id'][1]"/>
|
||||
<div t-esc="partner_data['website_short_description']"/>
|
||||
<a class="media-heading" t-attf-href="/partners/#{slug(partner)}">
|
||||
<span t-field="partner.display_name"/>
|
||||
</a>
|
||||
<div t-field="partner.website_short_description"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
@ -126,5 +127,12 @@
|
|||
</t>
|
||||
</template>
|
||||
|
||||
<template id="grade_in_detail" inherit_id="website_partner.partner_detail">
|
||||
<xpath expr="//*[@id='partner_name']" position="after">
|
||||
<h3 class="col-md-12 text-center text-muted" t-if="partner.grade_id and partner.grade_id.website_published">
|
||||
<span t-field="partner.grade_id"/> Partner</h3>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import openerp
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.addons.web import http
|
||||
from openerp.tools.translate import _
|
||||
from openerp.addons.web.http import request
|
||||
|
@ -19,14 +18,13 @@ class WebsiteCustomer(http.Controller):
|
|||
'/customers/country/<int:country_id>/page/<int:page>',
|
||||
'/customers/country/<country_name>-<int:country_id>/page/<int:page>',
|
||||
], type='http', auth="public", website=True, multilang=True)
|
||||
def customers(self, country_id=0, page=0, **post):
|
||||
def customers(self, country_id=0, page=0, country_name='', **post):
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
country_obj = request.registry['res.country']
|
||||
partner_obj = request.registry['res.partner']
|
||||
partner_name = post.get('search', '')
|
||||
|
||||
base_domain = [('website_published','=',True)]
|
||||
domain = list(base_domain)
|
||||
domain = [('website_published', '=', True), ('assigned_partner_id', '!=', False)]
|
||||
if partner_name:
|
||||
domain += [
|
||||
'|',
|
||||
|
@ -57,25 +55,24 @@ class WebsiteCustomer(http.Controller):
|
|||
})
|
||||
|
||||
# search customers to display
|
||||
partner_ids = partner_obj.search(cr, openerp.SUPERUSER_ID, domain, context=request.context)
|
||||
google_map_partner_ids = ",".join([str(p) for p in partner_ids])
|
||||
partner_count = partner_obj.search_count(cr, openerp.SUPERUSER_ID, domain, context=request.context)
|
||||
|
||||
# pager
|
||||
pager = request.website.pager(
|
||||
url="/customers", total=len(partner_ids), page=page, step=self._references_per_page,
|
||||
url="/customers", total=partner_count, page=page, step=self._references_per_page,
|
||||
scope=7, url_args=post
|
||||
)
|
||||
|
||||
# browse page of customers to display
|
||||
partner_ids = partner_obj.search(
|
||||
cr, openerp.SUPERUSER_ID, domain,
|
||||
limit=self._references_per_page, offset=pager['offset'], context=context)
|
||||
partners_data = partner_obj.read(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids, request.website.get_partner_white_list_fields(), context=request.context)
|
||||
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, domain,
|
||||
offset=pager['offset'], limit=self._references_per_page,
|
||||
context=request.context)
|
||||
google_map_partner_ids = ','.join(map(str, partner_ids))
|
||||
partners = partner_obj.browse(request.cr, openerp.SUPERUSER_ID, partner_ids, request.context)
|
||||
|
||||
values = {
|
||||
'countries': countries,
|
||||
'current_country_id': country_id or 0,
|
||||
'partners_data': partners_data,
|
||||
'partners': partners,
|
||||
'google_map_partner_ids': google_map_partner_ids,
|
||||
'pager': pager,
|
||||
'post': post,
|
||||
|
@ -84,25 +81,10 @@ class WebsiteCustomer(http.Controller):
|
|||
return request.website.render("website_customer.index", values)
|
||||
|
||||
@http.route(['/customers/<int:partner_id>', '/customers/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
|
||||
def customer(self, partner_id, **post):
|
||||
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
|
||||
values = website_partner.get_partner_template_value(partner)
|
||||
def customer(self, partner_id, partner_name='', **post):
|
||||
values = website_partner.get_partner_template_value(partner_id)
|
||||
if not values:
|
||||
return self.customers(**post)
|
||||
|
||||
partner_obj = request.registry['res.partner']
|
||||
if values['partner_data'].get('assigned_partner_id', None):
|
||||
values['assigned_partner_data'] = partner_obj.read(
|
||||
request.cr, openerp.SUPERUSER_ID, [values['partner_data']['assigned_partner_id'][0]],
|
||||
request.website.get_partner_white_list_fields(), context=request.context)[0]
|
||||
if values['partner_data'].get('implemented_partner_ids', None):
|
||||
implemented_partners_data = partner_obj.read(
|
||||
request.cr, openerp.SUPERUSER_ID, values['partner_data']['implemented_partner_ids'],
|
||||
request.website.get_partner_white_list_fields(), context=request.context)
|
||||
values['implemented_partners_data'] = []
|
||||
for data in implemented_partners_data:
|
||||
if data.get('website_published'):
|
||||
values['implemented_partners_data'].append(data)
|
||||
|
||||
values['main_object'] = values['partner']
|
||||
return request.website.render("website_customer.details", values)
|
||||
|
|
|
@ -39,21 +39,22 @@
|
|||
</div>
|
||||
|
||||
<div class="row">
|
||||
<t t-if="not partners_data">
|
||||
<p>No result found.</p>
|
||||
</t>
|
||||
<t t-foreach="partners_data" t-as="partner_data" class="media">
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
|
||||
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
|
||||
</a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }" t-esc="partner_data.get('name')"/>
|
||||
<div t-raw="partner_data.get('website_short_description') or ''"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix mb8"/>
|
||||
</t>
|
||||
|
||||
<p t-if="not partners">No result found</p>
|
||||
<t t-foreach="partners" t-as="partner">
|
||||
<div class="media">
|
||||
<a class="pull-left" t-attf-href="/customers/#{slug(partner)}"
|
||||
t-field="partner.image_small"
|
||||
t-field-options='{"widget": "image", "class": "media-object"}'
|
||||
></a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/customers/#{slug(partner)}">
|
||||
<span t-field="partner.display_name"/>
|
||||
</a>
|
||||
<div t-field="partner.website_short_description"/>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -101,15 +102,15 @@
|
|||
<div class="col-md-5">
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="/customers">Our References</a></li>
|
||||
<li class="active"><span t-esc="partner_data.get('name')"/></li>
|
||||
<li class="active"><span t-field="partner.display_name"/></li>
|
||||
</ol>
|
||||
</div>
|
||||
<t t-call="website_partner.partner_detail">
|
||||
<t t-set="left_column">
|
||||
<div id="left_column"></div>
|
||||
<div id="left_column"><t t-call="website_customer.implemented_by_block"/></div>
|
||||
</t>
|
||||
<t t-set="right_column">
|
||||
<div id="right_column"></div>
|
||||
<div id="right_column"><t t-call="website_customer.references_block"/></div>
|
||||
</t>
|
||||
</t>
|
||||
</div>
|
||||
|
@ -119,57 +120,59 @@
|
|||
</t>
|
||||
</template>
|
||||
|
||||
<template id="partner_assign" inherit_option_id="website_customer.details" inherit_id="website_customer.details" name="Implemented By">
|
||||
<xpath expr="//div[@id='left_column']" position="inside">
|
||||
<t t-if="assigned_partner_data">
|
||||
<template id="partner_details" inherit_id="website_partner.partner_page" name="Partner Detail Columns">
|
||||
<xpath expr="//t[@t-call='website_partner.partner_detail']" position="inside">
|
||||
<t t-set="left_column"><div id="left_column"><t t-call="website_customer.implemented_by_block"/></div></t>
|
||||
<t t-set="right_column"><div id="right_column"><t t-call="website_customer.references_block"/></div></t>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="implemented_by_block" name="Partner Implemented By Block">
|
||||
<t t-if="partner.assigned_partner_id and partner.assigned_partner_id.website_published">
|
||||
<div class="panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<h4>Implemented By</h4>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<div class="text-center">
|
||||
<img class="img img-shadow" t-attf-src="data:image/png;base64,#{assigned_partner_data.get('image_medium')}"/>
|
||||
</div>
|
||||
<address class="mt16 mb8">
|
||||
<strong t-esc="assigned_partner_data.get('name')"/>
|
||||
<div t-if="assigned_partner_data.get('phone')">
|
||||
<span class="fa fa-phone"/> <span t-esc="assigned_partner_data.get('phone')"/>
|
||||
</div>
|
||||
<div t-if="assigned_partner_data.get('email')">
|
||||
<span class="fa fa-envelope"/>
|
||||
<a t-att-href="'mailto:'+assigned_partner_data.get('email')">
|
||||
<span t-esc="assigned_partner_data.get('email')"/>
|
||||
</a>
|
||||
</div>
|
||||
</address>
|
||||
<div>
|
||||
<a t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }/#references" t-if="implemented_partner_ids">
|
||||
<t t-esc="len(implemented_partner_ids)"/> references
|
||||
</a>
|
||||
</div>
|
||||
<div class="panel-body text-center">
|
||||
<h4>
|
||||
<a t-attf-href="/partners/#{slug(partner.assigned_partner_id)}">
|
||||
<span t-field="partner.assigned_partner_id"/>
|
||||
<span class="small"> (<t t-esc="len([p for p in partner.assigned_partner_id.implemented_partner_ids if p.website_published])"/> reference(s))</span>
|
||||
</a>
|
||||
</h4>
|
||||
<div><a t-attf-href="/partners/#{slug(partner.assigned_partner_id)}"
|
||||
t-field="partner.assigned_partner_id.image_medium"
|
||||
t-field-options='{"widget": "image", "class": "center-block"}'
|
||||
/>
|
||||
</div>
|
||||
<address class="well text-left">
|
||||
<div t-field="partner.assigned_partner_id" t-field-options='{
|
||||
"widget": "contact",
|
||||
"fields": ["address", "website", "phone", "fax", "email"]
|
||||
}'/>
|
||||
</address>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
<template id="references" inherit_id="website_customer.details" name="Partner References">
|
||||
<xpath expr="//div[@id='right_column']" position="inside">
|
||||
<t t-if="implemented_partners_data">
|
||||
<template id="references_block" name="Partner References Block">
|
||||
<t t-if="any([p.website_published for p in partner.implemented_partner_ids])">
|
||||
<h3 id="references">References</h3>
|
||||
<div t-foreach="implemented_partners_data" t-as="partner_data" class="media">
|
||||
<a class="pull-left" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
|
||||
<img class="media-object" t-attf-src="data:image/png;base64,#{partner_data.get('image_small')}"/>
|
||||
<div t-foreach="partner.implemented_partner_ids" t-as="reference" class="media">
|
||||
<t t-if="reference.website_published">
|
||||
<a class="pull-left" t-attf-href="/customers/#{slug(reference)}">
|
||||
<span t-field="reference.image_small" t-field-options='{"widget": "image", "class": "center-block"}'/>
|
||||
</a>
|
||||
<div class="media-body" style="min-height: 64px;">
|
||||
<a class="media-heading" t-attf-href="/customers/#{ slug([partner_data.get('id'), partner_data.get('name')]) }">
|
||||
<t t-if="partner_data.get('parent_id')"><span t-esc="partner_data.get('parent_id')[1]"/></t> <span t-esc="partner_data.get('name')"/>
|
||||
<a class="media-heading" t-attf-href="/customers/#{slug(reference)}">
|
||||
<span t-field="reference.self"/>
|
||||
</a>
|
||||
<div t-if="partner_data.get('website_short_description')" t-raw="partner_data.get('website_short_description')"/>
|
||||
<div t-field='reference.website_short_description'/>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</data>
|
||||
|
|
|
@ -83,7 +83,6 @@ class website_event(website_event):
|
|||
|
||||
def _add_event(self, event_name="New Event", context={}, **kwargs):
|
||||
try:
|
||||
print kwargs
|
||||
dummy, res_id = request.registry.get('ir.model.data').get_object_reference(request.cr, request.uid, 'event_sale', 'product_product_event')
|
||||
context['default_event_ticket_ids'] = [[0,0,{
|
||||
'name': _('Subscription'),
|
||||
|
|
|
@ -18,19 +18,17 @@
|
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
import collections
|
||||
|
||||
import datetime
|
||||
import re
|
||||
|
||||
import pytz
|
||||
import werkzeug.utils
|
||||
|
||||
import openerp
|
||||
from openerp.addons.web import http
|
||||
from openerp.addons.web.http import request
|
||||
from openerp.addons.website.controllers.main import Website as controllers
|
||||
import datetime
|
||||
|
||||
import re
|
||||
import werkzeug.utils
|
||||
|
||||
controllers = controllers()
|
||||
import pytz
|
||||
from pytz import timezone
|
||||
|
||||
class website_event(http.Controller):
|
||||
@http.route(['/event/<model("event.event"):event>/track/<model("event.track"):track>'], type='http', auth="public", website=True, multilang=True)
|
||||
|
@ -79,24 +77,21 @@ class website_event(http.Controller):
|
|||
# TODO: not implemented
|
||||
@http.route(['/event/<model("event.event"):event>/agenda'], type='http', auth="public", website=True, multilang=True)
|
||||
def event_agenda(self, event, tag=None, **post):
|
||||
comp = lambda x: (x.date, bool(x.location_id))
|
||||
event.track_ids.sort(lambda x,y: cmp(comp(x), comp(y)))
|
||||
days_tracks = collections.defaultdict(lambda: [])
|
||||
for track in sorted(event.track_ids, key=lambda x: (x.date, bool(x.location_id))):
|
||||
if not track.date: continue
|
||||
days_tracks[track.date[:10]].append(track)
|
||||
|
||||
days = {}
|
||||
days_nbr = {}
|
||||
for track in event.track_ids:
|
||||
if not track.date: continue
|
||||
days.setdefault(track.date[:10], [])
|
||||
days[track.date[:10]].append(track)
|
||||
|
||||
for d in days:
|
||||
days_nbr[d] = len(days[d])
|
||||
days[d] = self._prepare_calendar(event, days[d])
|
||||
days_tracks_count = {}
|
||||
for day, tracks in days_tracks.iteritems():
|
||||
days_tracks_count[day] = len(tracks)
|
||||
days[day] = self._prepare_calendar(event, tracks)
|
||||
|
||||
return request.website.render("website_event_track.agenda", {
|
||||
'event': event,
|
||||
'days': days,
|
||||
'days_nbr': days_nbr,
|
||||
'days_nbr': days_tracks_count,
|
||||
'tag': tag
|
||||
})
|
||||
|
||||
|
|
|
@ -53,7 +53,9 @@
|
|||
<input type="text" class="form-control" placeholder="Filter Tracks..." id="event_track_search"/>
|
||||
</div>
|
||||
</section>
|
||||
<section class="container" t-foreach="days.keys()" t-as="day">
|
||||
<t t-set="dayslist" t-value="days.keys()"/>
|
||||
<t t-set="dayslist2" t-value="dayslist.sort()"/> <!-- display days in the right order -->
|
||||
<section class="container" t-foreach="dayslist" t-as="day">
|
||||
<t t-set="locations" t-value="days[day]['locations']"/>
|
||||
<t t-set="dates" t-value="days[day]['dates']"/>
|
||||
<h3 class="page-header mt0">
|
||||
|
|
|
@ -94,3 +94,7 @@ a.no-decoration {
|
|||
font: 1.2em "Helvetica Neue", Helvetica, Arial, sans-serif !important;
|
||||
height: 1.2em !important;
|
||||
}
|
||||
|
||||
button.btn-link.text-muted {
|
||||
color: #999999;
|
||||
}
|
||||
|
|
|
@ -74,3 +74,6 @@ a.no-decoration
|
|||
.text-tags .text-tag .text-button
|
||||
font: 1.2em "Helvetica Neue", Helvetica, Arial, sans-serif !important
|
||||
height: 1.2em !important
|
||||
|
||||
button.btn-link.text-muted
|
||||
color: #999
|
||||
|
|
|
@ -3,7 +3,7 @@ $(document).ready(function () {
|
|||
$('.vote_up ,.vote_down').on('click', function (ev) {
|
||||
ev.preventDefault();
|
||||
var $link = $(ev.currentTarget);
|
||||
openerp.jsonRpc($link.attr('href'), 'call', {})
|
||||
openerp.jsonRpc($link.data('href'), 'call', {})
|
||||
.then(function (data) {
|
||||
if (data['error']){
|
||||
if (data['error'] == 'own_post'){
|
||||
|
@ -47,7 +47,7 @@ $(document).ready(function () {
|
|||
$('.accept_answer').on('click', function (ev) {
|
||||
ev.preventDefault();
|
||||
var $link = $(ev.currentTarget);
|
||||
openerp.jsonRpc($link.attr('href'), 'call', {}).then(function (data) {
|
||||
openerp.jsonRpc($link.data('href'), 'call', {}).then(function (data) {
|
||||
if (data['error']) {
|
||||
if (data['error'] == 'anonymous_user'){
|
||||
var $warning = $('<div class="alert alert-danger alert-dismissable" id="correct_answer_alert" style="position:absolute; margin-top: -30px; margin-left: 90px;">'+
|
||||
|
@ -83,7 +83,7 @@ $(document).ready(function () {
|
|||
$('.favourite_question').on('click', function (ev) {
|
||||
ev.preventDefault();
|
||||
var $link = $(ev.currentTarget);
|
||||
openerp.jsonRpc($link.attr('href'), 'call', {}).then(function (data) {
|
||||
openerp.jsonRpc($link.data('href'), 'call', {}).then(function (data) {
|
||||
if (data) {
|
||||
$link.addClass("forum_favourite_question")
|
||||
} else {
|
||||
|
@ -96,7 +96,7 @@ $(document).ready(function () {
|
|||
$('.comment_delete').on('click', function (ev) {
|
||||
ev.preventDefault();
|
||||
var $link = $(ev.currentTarget);
|
||||
openerp.jsonRpc($link.attr('href'), 'call', {}).then(function (data) {
|
||||
openerp.jsonRpc($link.data('href'), 'call', {}).then(function (data) {
|
||||
$link.parents('.comment').first().remove();
|
||||
});
|
||||
return true;
|
||||
|
|
|
@ -20,6 +20,14 @@
|
|||
</xpath>
|
||||
</template>
|
||||
|
||||
<!-- helper -->
|
||||
<template id="muted_button">
|
||||
<form method="POST" t-att-action="url">
|
||||
<button t-attf-class="text-muted fa btn-link #{classes}">
|
||||
<t t-esc="label"/></button>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<!-- Page Index -->
|
||||
<template id="header" name="Forum Index">
|
||||
<t t-call="website.layout">
|
||||
|
@ -387,10 +395,10 @@
|
|||
<template id="vote">
|
||||
<div t-attf-class="box oe_grey">
|
||||
<a t-attf-class="vote_up fa fa-thumbs-up no-decoration #{post.user_vote == 1 and 'text-success' or ''}"
|
||||
t-attf-href="/forum/#{slug(post.forum_id)}/post/#{slug(post)}/upvote"/>
|
||||
t-attf-data-href="/forum/#{slug(post.forum_id)}/post/#{slug(post)}/upvote"/>
|
||||
<span id="vote_count" t-esc="post.vote_count"/>
|
||||
<a t-attf-class="vote_down fa fa-thumbs-down no-decoration #{post.user_vote == -1 and 'text-warning' or ''}"
|
||||
t-attf-href="/forum/#{slug(post.forum_id)}/post/#{slug(post)}/downvote"/>
|
||||
t-attf-data-href="/forum/#{slug(post.forum_id)}/post/#{slug(post)}/downvote"/>
|
||||
<div t-if="vote_count > 1" class="subtitle">
|
||||
votes
|
||||
</div>
|
||||
|
@ -412,7 +420,7 @@
|
|||
<span t-field="question.views"/> Views
|
||||
</div>
|
||||
<div class="mt4">
|
||||
<a t-attf-href="/forum/#{slug(question.forum_id)}/question/#{slug(question)}/toggle_favourite"
|
||||
<a t-attf-data-href="/forum/#{slug(question.forum_id)}/question/#{slug(question)}/toggle_favourite"
|
||||
t-attf-class="favourite_question no-decoration fa fa-2x fa-star #{question.user_favourite and 'forum_favourite_question' or ''}"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -495,7 +503,7 @@
|
|||
</t>
|
||||
<div class="text-muted mt8">
|
||||
<a t-attf-class="accept_answer fa fa-2x fa-check-circle no-decoration #{answer.is_correct and 'oe_answer_true' or 'oe_answer_false'}"
|
||||
t-attf-href="/forum/#{slug(question.forum_id)}/post/#{slug(answer)}/toggle_correct"/>
|
||||
t-attf-data-href="/forum/#{slug(question.forum_id)}/post/#{slug(answer)}/toggle_correct"/>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-left: 95px;" class="clearfix">
|
||||
|
@ -511,10 +519,18 @@
|
|||
<a class="text-muted fa fa-edit" t-attf-href="/forum/#{slug(forum)}/post/#{slug(answer)}/edit"> Edit</a>
|
||||
</li>
|
||||
<li t-if="(user.id == answer.create_uid.id and can_unlink_own) or can_unlink_all">
|
||||
<a class="text-muted fa fa-trash-o" t-attf-href="/forum/#{slug(forum)}/post/#{slug(answer)}/delete"> Delete</a>
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(answer)}/delete"/></t>
|
||||
<t t-set="label"> Delete</t>
|
||||
<t t-set="classes">fa-trash-o</t>
|
||||
</t>
|
||||
</li>
|
||||
<li t-if="user.id == answer.create_uid.id">
|
||||
<a class="text-muted fa fa-magic" t-attf-href="/forum/#{slug(forum)}/post/#{slug(answer)}/convert_to_comment"> Convert as a comment</a>
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(answer)}/convert_to_comment"/></t>
|
||||
<t t-set="label">Convert as a comment</t>
|
||||
<t t-set="classes">fa-magic</t>
|
||||
</t>
|
||||
</li>
|
||||
</ul>
|
||||
<span t-field="answer.create_uid.image" t-field-options='{"widget": "image", "class":"pull-left img img-circle img-avatar"}'/>
|
||||
|
@ -550,15 +566,19 @@
|
|||
<div t-foreach="reversed(object.website_message_ids)" t-as="message" class="comment oe_comment_grey">
|
||||
<small class="text-muted">
|
||||
<button type="button" t-if="user.partner_id.id == message.author_id.id and user.karma>=750"
|
||||
t-attf-href="/forum/#{slug(forum)}/post/#{slug(object)}/comment/#{slug(message)}/delete"
|
||||
t-attf-data-href="/forum/#{slug(forum)}/post/#{slug(object)}/comment/#{slug(message)}/delete"
|
||||
class="close comment_delete">&times;</button>
|
||||
<span t-field="message.body"/>
|
||||
<a t-attf-href="/forum/#{slug(forum)}/partner/#{message.author_id.id}"
|
||||
t-field="message.author_id" t-field-options='{"widget": "contact", "country_image": true, "fields": ["name", "country_id"]}'
|
||||
style="display: inline-block;"/>
|
||||
on <span t-field="message.date" t-field-options='{"format":"short"}'/>
|
||||
<a class="fa fa-magic text-muted pull-right"
|
||||
t-attf-href="/forum/#{slug(forum)}/post/#{slug(object)}/comment/#{slug(message)}/convert_to_answer">Convert as an answer</a>
|
||||
|
||||
<t t-call="website_forum.muted_button">
|
||||
<t t-set="url"><t t-escf="/forum/#{slug(forum)}/post/#{slug(object)}/comment/#{slug(message)}/convert_to_answer"/></t>
|
||||
<t t-set="label"> Convert as an answer</t>
|
||||
<t t-set="classes">fa-magic pull-right</t>
|
||||
</t>
|
||||
</small>
|
||||
</div>
|
||||
<div class="css_editable_mode_hidden">
|
||||
|
@ -717,7 +737,7 @@
|
|||
<select class="form-control" name="country">
|
||||
<option value="">Country...</option>
|
||||
<t t-foreach="countries or []" t-as="country">
|
||||
<option t-att-value="country.id" t-att-selected="country.id == user.partner_id.country.id"><t t-esc="country.name"/></option>
|
||||
<option t-att-value="country.id" t-att-selected="country.id == user.partner_id.country_id.id"><t t-esc="country.name"/></option>
|
||||
</t>
|
||||
</select>
|
||||
</div>
|
||||
|
|
|
@ -1,43 +1,25 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
import openerp
|
||||
import werkzeug
|
||||
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.addons.web import http
|
||||
from openerp.addons.web.http import request
|
||||
import werkzeug
|
||||
|
||||
|
||||
def get_partner_template_value(partner):
|
||||
ctx = dict(request.context, show_address=True)
|
||||
partner_obj = request.registry['res.partner']
|
||||
partner_id = partner.id
|
||||
partner_ids = partner_obj.search(request.cr, request.uid, [('id', '=', partner_id)], context=request.context)
|
||||
if not partner.exists() or not partner_ids:
|
||||
partner = None
|
||||
|
||||
partner_data = partner_obj.read(
|
||||
request.cr, openerp.SUPERUSER_ID, [partner_id], request.website.get_partner_white_list_fields(), context=ctx)[0]
|
||||
|
||||
if not partner_data["website_published"]:
|
||||
def get_partner_template_value(partner_id):
|
||||
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
|
||||
if not partner.exists() or not partner.website_published:
|
||||
return None
|
||||
|
||||
partner_data['name_get'] = partner_obj.name_get(request.cr, openerp.SUPERUSER_ID, [partner_id],context=request.context)[0]
|
||||
|
||||
partner_data['address'] = '<br/>'.join(partner_obj.name_get(
|
||||
request.cr, openerp.SUPERUSER_ID, [partner_id],context=ctx)[0][1].split('\n')[1:])
|
||||
|
||||
values = {
|
||||
return {
|
||||
'partner': partner,
|
||||
'partner_data': partner_data,
|
||||
}
|
||||
return values
|
||||
|
||||
class WebsitePartner(http.Controller):
|
||||
@http.route(['/partners/<int:partner_id>', '/partners/<partner_name>-<int:partner_id>'], type='http', auth="public", website=True, multilang=True)
|
||||
def partner(self, partner_id, **post):
|
||||
def partner(self, partner_id, partner_name='', **post):
|
||||
""" Route for displaying a single partner / customer. """
|
||||
partner = request.registry['res.partner'].browse(request.cr, SUPERUSER_ID, partner_id, context=request.context)
|
||||
values = get_partner_template_value(partner)
|
||||
values = get_partner_template_value(partner_id)
|
||||
if not values:
|
||||
raise werkzeug.exceptions.NotFound
|
||||
return request.website.render("website_partner.partner_detail", values)
|
||||
raise werkzeug.exceptions.NotFound()
|
||||
|
||||
return request.website.render("website_partner.partner_page", values)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="base.main_company" model="res.company">
|
||||
<record id="base.main_partner" model="res.partner">
|
||||
<field name="website_published">True</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
|
|
@ -1,3 +1 @@
|
|||
import res_partner
|
||||
import res_company
|
||||
import website
|
|
@ -1,10 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp.osv import osv, fields
|
||||
|
||||
|
||||
class WebsiteResCompany(osv.Model):
|
||||
_inherit = 'res.company'
|
||||
_columns = {
|
||||
'website_published': fields.related('partner_id', 'website_published', string='Publish', help="Publish on the website"),
|
||||
}
|
|
@ -5,7 +5,10 @@ from openerp.osv import osv, fields
|
|||
|
||||
class WebsiteResPartner(osv.Model):
|
||||
_name = 'res.partner'
|
||||
_inherit = ['res.partner','website.seo.metadata']
|
||||
_inherit = ['res.partner', 'website.seo.metadata']
|
||||
|
||||
def _get_ids(self, cr, uid, ids, flds, args, context=None):
|
||||
return {i: i for i in ids}
|
||||
|
||||
_columns = {
|
||||
'website_published': fields.boolean(
|
||||
|
@ -16,10 +19,10 @@ class WebsiteResPartner(osv.Model):
|
|||
'website_short_description': fields.text(
|
||||
'Website artner Short Description'
|
||||
),
|
||||
# hack to allow using plain browse record in qweb views
|
||||
'self': fields.function(_get_ids, type='many2one', relation=_name),
|
||||
}
|
||||
|
||||
_defaults = {
|
||||
'website_published': False
|
||||
}
|
||||
|
||||
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])
|
||||
|
|
|
@ -1,10 +0,0 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from openerp.osv import orm
|
||||
|
||||
|
||||
class Website(orm.Model):
|
||||
_inherit = 'website'
|
||||
|
||||
def get_partner_white_list_fields(self, cr, uid, ids, context=None):
|
||||
return ["name", "parent_id", 'website_short_description', "website_published",
|
||||
"website_description", "tel", "fax", "image", "image_small", "image_medium"]
|
|
@ -2,54 +2,33 @@
|
|||
<openerp>
|
||||
<data>
|
||||
|
||||
<template id="partner_detail" name="Partner Details (Complex Template for Access Right)">
|
||||
<t t-if="partner" >
|
||||
<t t-call="website.publish_management">
|
||||
<t t-set="object" t-value="partner"/>
|
||||
<t t-set="publish_edit" t-value="True"/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="partner"><h1 class="col-md-12 text-center" t-field="partner.name"/></t>
|
||||
<t t-if="not partner"><h1 class="col-md-12 text-center" t-esc="partner_data.get('name_get')[1]"/></t>
|
||||
<div class="col-md-4">
|
||||
<div class="text-center">
|
||||
<t t-if="partner"><img t-att-src="partner.img('image')"/></t>
|
||||
<t t-if="not partner"><img t-attf-src="data:image/png;base64,#{partner_data.get('image')}"/></t>
|
||||
<template id="partner_page" name="Partner Page">
|
||||
<t t-call="website.layout">
|
||||
<div id="wrap">
|
||||
<div class="oe_structure"/>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<t t-call="website_partner.partner_detail"></t>
|
||||
</div>
|
||||
<address>
|
||||
<table style="margin: auto;" class="well">
|
||||
<colgroup>
|
||||
<col width="100"/>
|
||||
<col/>
|
||||
</colgroup>
|
||||
<tbody>
|
||||
<t t-if="partner">
|
||||
<t t-set="address" t-value="'<br/>'.join(partner.name_get()[0][1].split('\n')[1:])"/>
|
||||
<tr t-if="address or editable"><th class="texttop">Address</th><td class="span2" t-raw="address"/></tr>
|
||||
</t>
|
||||
<tr t-if="not partner and partner_data.get('address')"><th class="texttop">Address</th><td class="span2" t-raw="partner_data.get('address')"/></tr>
|
||||
</div>
|
||||
<div class="oe_structure"/>
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<tr t-if="partner and (partner.website or editable)"><th>Website</th><td class="span2">
|
||||
<t t-if="partner.website"><span t-field="partner.website"/></t></td></tr>
|
||||
<tr t-if="partner_data.get('website')"><th>Website</th><td class="span2"><span t-esc="partner_data.get('website')"/></td></tr>
|
||||
|
||||
<tr t-if="partner and (partner.phone or editable)"><th>Phone</th><td class="span2">
|
||||
<t t-if="partner.phone"><span t-field="partner.phone"/></t></td></tr>
|
||||
<tr t-if="partner_data.get('phone')"><th>Phone</th><td class="span2"><span t-esc="partner_data.get('phone')"/></td></tr>
|
||||
|
||||
<tr t-if="partner and (partner.mobile or editable)"><th>Tel</th><td class="span2">
|
||||
<t t-if="partner.mobile"><span t-field="partner.mobile"/></t></td></tr>
|
||||
<tr t-if="partner_data.get('mobile')"><th>Tel</th><td class="span2"><span t-esc="partner_data.get('mobile')"/></td></tr>
|
||||
|
||||
<tr t-if="partner and (partner.fax or editable)"><th>Fax</th><td class="span2">
|
||||
<t t-if="partner.fax"><span t-field="partner.fax"/></t></td></tr>
|
||||
<tr t-if="partner_data.get('fax')"><th>Fax</th><td class="span2"><span t-esc="partner_data.get('fax')"/></td></tr>
|
||||
|
||||
<tr t-if="partner and (partner.email or editable)"><th>Email</th><td class="span2">
|
||||
<t t-if="partner.email"><span t-field="partner.email"/></t></td></tr>
|
||||
<tr t-if="partner_data.get('email')"><th>Email</th><td class="span2"><span t-esc="partner_data.get('email')"/></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<template id="partner_detail" name="Partner Details">
|
||||
<t t-call="website.publish_management">
|
||||
<t t-set="object" t-value="partner"/>
|
||||
<t t-set="publish_edit" t-value="True"/>
|
||||
</t>
|
||||
<h1 class="col-md-12 text-center" id="partner_name" t-field="partner.display_name"/>
|
||||
<div class="col-md-4">
|
||||
<div t-field="partner.image" t-field-options='{"widget": "image", "class": "center-block"}'/>
|
||||
<address class="well">
|
||||
<div t-field="partner.self" t-field-options='{
|
||||
"widget": "contact",
|
||||
"fields": ["address", "website", "phone", "fax", "email"]
|
||||
}'/>
|
||||
</address>
|
||||
<t t-raw="left_column or ''"/>
|
||||
</div>
|
||||
|
@ -61,9 +40,6 @@
|
|||
<div class="css_non_editable_mode_hidden" t-field="partner.website_short_description"/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="not partner">
|
||||
<div class="col-md-8 mt32" t-raw="partner_data.get('website_description')"/>
|
||||
</t>
|
||||
<t t-raw="right_column or ''"/>
|
||||
</div>
|
||||
</template>
|
||||
|
|
Loading…
Reference in New Issue