[REF] Achieved the same result with a sorting to avoid having to add a field in stable release

This commit is contained in:
Thibault Delavallée 2014-05-16 17:14:03 +02:00
parent 2ece5f9c4c
commit a6b9269398
3 changed files with 30 additions and 24 deletions

View File

@ -54,20 +54,22 @@ class res_partner_activation(osv.osv):
class res_partner(osv.osv):
_inherit = "res.partner"
def _get_implemented_count(self, cr, uid, ids, field_name, arg, context):
res = dict.fromkeys(ids, 0)
for partner in self.browse(cr, uid, ids, context=context):
res[partner.id] = len(partner.implemented_partner_ids)
return res
# uncomment me in trunk
# def _get_implemented_count(self, cr, uid, ids, field_name, arg, context):
# res = dict.fromkeys(ids, 0)
# for partner in self.browse(cr, uid, ids, context=context):
# res[partner.id] = len(partner.implemented_partner_ids)
# return res
def _get_partner_from_implementation(self, cr, uid, ids, context=None):
pids = set()
for partner in self.browse(cr, uid, ids, context=context):
pids.add(partner.id)
if partner.assigned_partner_id:
pids.add(partner.assigned_partner_id.id)
pids = pids | set([p.id for p in partner.implemented_partner_ids])
return list(pids)
# uncomment me in trunk
# def _get_partner_from_implementation(self, cr, uid, ids, context=None):
# pids = set()
# for partner in self.browse(cr, uid, ids, context=context):
# pids.add(partner.id)
# if partner.assigned_partner_id:
# pids.add(partner.assigned_partner_id.id)
# pids = pids | set([p.id for p in partner.implemented_partner_ids])
# return list(pids)
_columns = {
'partner_weight': fields.integer('Grade Weight',
@ -87,11 +89,12 @@ class res_partner(osv.osv):
'res.partner', 'assigned_partner_id',
string='Implementation References',
),
'implemented_count': fields.function(
_get_implemented_count, string="Implementations", type='integer',
store={
'res.partner': (_get_partner_from_implementation, ['assigned_partner_id', 'implemented_partner_ids'], 10),
}),
# uncomment me in trunk
# 'implemented_count': fields.function(
# _get_implemented_count, string="Implementations", type='integer',
# store={
# 'res.partner': (_get_partner_from_implementation, ['assigned_partner_id', 'implemented_partner_ids'], 10),
# }),
}
_defaults = {
'partner_weight': lambda *args: 0

View File

@ -100,11 +100,14 @@ class WebsiteCrmPartnerAssign(http.Controller):
# search partners matching current search parameters
partner_ids = partner_obj.search(
request.cr, SUPERUSER_ID, base_partner_domain,
offset=pager['offset'], limit=self._references_per_page,
order="grade_id DESC, implemented_count DESC",
context=request.context)
google_map_partner_ids = ','.join(map(str, partner_ids))
order="grade_id DESC",
context=request.context) # todo in trunk: order="grade_id DESC, implemented_count DESC", offset=pager['offset'], limit=self._references_per_page
partners = partner_obj.browse(request.cr, SUPERUSER_ID, partner_ids, request.context)
# remove me in trunk
partners.sort(key=lambda x: (-1 * (x.grade_id and x.grade_id.id or 0), len(x.implemented_partner_ids)), reverse=True)
partners = partners[pager['offset']:pager['offset'] + self._references_per_page]
google_map_partner_ids = ','.join(map(str, [p.id for p in partners]))
values = {
'countries': countries,

View File

@ -94,9 +94,9 @@
<span t-field="partner.display_name"/>
</a>
<div t-field="partner.website_short_description"/>
<t t-if="partner.implemented_count">
<t t-if="any([p.website_published for p in partner.implemented_partner_ids])">
<small><a t-attf-href="/partners/#{slug(partner)}#right_column">
<t t-raw="partner.implemented_count"/> reference(s)
<t t-raw="len([p for p in partner.implemented_partner_ids if p.website_published])"/> reference(s)
</a></small>
</t>
</div>