diff --git a/addons/crm/res_partner.py b/addons/crm/res_partner.py
index 31cf5344f2e..b34e5c7dbb9 100644
--- a/addons/crm/res_partner.py
+++ b/addons/crm/res_partner.py
@@ -25,7 +25,7 @@ class res_partner(osv.osv):
""" Inherits partner and adds CRM information in the partner form """
_inherit = 'res.partner'
- def _opportunity_meeting_count(self, cr, uid, ids, field_name, arg, context=None):
+ def _opportunity_meeting_phonecall_count(self, cr, uid, ids, field_name, arg, context=None):
res = dict(map(lambda x: (x,{'opportunity_count': 0, 'meeting_count': 0}), ids))
# the user may not have access rights for opportunities or meetings
try:
@@ -33,6 +33,7 @@ class res_partner(osv.osv):
res[partner.id] = {
'opportunity_count': len(partner.opportunity_ids),
'meeting_count': len(partner.meeting_ids),
+ 'phonecall_count': len(partner.meeting_ids),
}
except:
pass
@@ -42,12 +43,13 @@ class res_partner(osv.osv):
'section_id': fields.many2one('crm.case.section', 'Sales Team'),
'opportunity_ids': fields.one2many('crm.lead', 'partner_id',\
'Leads and Opportunities', domain=[('probability', 'not in', ['0', '100'])]),
- 'meeting_ids': fields.many2many('calendar.event', 'calendar_event_partner_rel','partner_id', 'meeting_id',
+ 'meeting_ids': fields.many2many('calendar.event', 'calendar_event_res_partner_rel','res_partner_id', 'calendar_event_id',
'Meetings'),
'phonecall_ids': fields.one2many('crm.phonecall', 'partner_id',\
'Phonecalls'),
- 'opportunity_count': fields.function(_opportunity_meeting_count, string="Opportunity", type='integer', multi='opp_meet'),
- 'meeting_count': fields.function(_opportunity_meeting_count, string="# Meetings", type='integer', multi='opp_meet'),
+ 'opportunity_count': fields.function(_opportunity_meeting_phonecall_count, string="Opportunity", type='integer', multi='opp_meet'),
+ 'meeting_count': fields.function(_opportunity_meeting_phonecall_count, string="# Meetings", type='integer', multi='opp_meet'),
+ 'phonecall_count': fields.function(_opportunity_meeting_phonecall_count, string="Phonecalls", type="integer", multi='opp_meet'),
}
def copy(self, cr, uid, record_id, default=None, context=None):
diff --git a/addons/crm/res_partner_view.xml b/addons/crm/res_partner_view.xml
index 9b13f77c5d2..3b6c4dcaa87 100644
--- a/addons/crm/res_partner_view.xml
+++ b/addons/crm/res_partner_view.xml
@@ -90,15 +90,25 @@
-
-
-
+
+
+ icon="fa-phone"
+ context="{'search_default_partner_id': active_id, 'default_duration': 1.0}">
+
+
diff --git a/addons/crm_claim/crm_claim.py b/addons/crm_claim/crm_claim.py
index 50cbe4a6c44..d55036193c4 100644
--- a/addons/crm_claim/crm_claim.py
+++ b/addons/crm_claim/crm_claim.py
@@ -190,8 +190,17 @@ class crm_claim(osv.osv):
class res_partner(osv.osv):
_inherit = 'res.partner'
+ def _claim_count(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict(map(lambda x: (x,0), ids))
+ try:
+ for partner in self.browse(cr, uid, ids, context=context):
+ res[partner.id] = len(partner.claims_ids)
+ except:
+ pass
+ return res
_columns = {
'claims_ids': fields.one2many('crm.claim', 'partner_id', 'Claims'),
+ 'claim_count': fields.function(_claim_count, string='# Claims', type='integer'),
}
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/crm_claim/res_partner_view.xml b/addons/crm_claim/res_partner_view.xml
index 4a5db879311..6d5d54498ee 100644
--- a/addons/crm_claim/res_partner_view.xml
+++ b/addons/crm_claim/res_partner_view.xml
@@ -9,11 +9,11 @@
-
+ name="%(crm_case_categ_claim0)d" icon="fa-comments" groups="base.group_sale_salesman">
+
+
diff --git a/addons/crm_project_issue/project_issue_view.xml b/addons/crm_project_issue/project_issue_view.xml
index b62e5f74880..4bb07a8e0f7 100644
--- a/addons/crm_project_issue/project_issue_view.xml
+++ b/addons/crm_project_issue/project_issue_view.xml
@@ -35,8 +35,11 @@
crm.lead
-
-
+
+
diff --git a/addons/email_template/email_template_view.xml b/addons/email_template/email_template_view.xml
index 6dda3e97571..c48d93365f9 100644
--- a/addons/email_template/email_template_view.xml
+++ b/addons/email_template/email_template_view.xml
@@ -16,13 +16,18 @@
diff --git a/addons/event/event.py b/addons/event/event.py
index 37efedf2549..1f2410a834c 100644
--- a/addons/event/event.py
+++ b/addons/event/event.py
@@ -149,6 +149,17 @@ class event_event(osv.osv):
res[event.id]= True
continue
return res
+
+ def _count_all(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict(map(lambda x: (x,{'count_registrations': 0, 'count_tracks': 0,}), ids))
+ try:
+ for data in self.browse(cr, uid, ids, context=context):
+ res[data.id] = {'count_registrations': len(data.registration_ids),
+ 'count_tracks': len(data.track_ids),
+ }
+ except:
+ pass
+ return res
_columns = {
'name': fields.char('Event Name', size=64, required=True, translate=True, readonly=False, states={'done': [('readonly', True)]}),
@@ -169,6 +180,7 @@ class event_event(osv.osv):
store={'event.registration': (_get_events_from_registrations, ['state'], 10),
'event.event': (lambda self, cr, uid, ids, c = {}: ids, ['seats_max', 'registration_ids'], 20)}),
'registration_ids': fields.one2many('event.registration', 'event_id', 'Registrations', readonly=False, states={'done': [('readonly', True)]}),
+ 'track_ids': fields.one2many('event.track', 'event_id', 'Tracks', readonly=False),
'date_begin': fields.datetime('Start Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'date_end': fields.datetime('End Date', required=True, readonly=True, states={'draft': [('readonly', False)]}),
'state': fields.selection([
@@ -191,6 +203,8 @@ class event_event(osv.osv):
'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}),
'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'),
'organizer_id': fields.many2one('res.partner', "Organizer"),
+ 'count_registrations': fields.function(_count_all, type="integer", string="Registrations", multi=True),
+ 'count_tracks': fields.function(_count_all, type='integer', string='Tracks', multi=True),
}
_defaults = {
'state': 'draft',
diff --git a/addons/event/event_view.xml b/addons/event/event_view.xml
index 2cdb74bea5b..cc6edfbd9bd 100644
--- a/addons/event/event_view.xml
+++ b/addons/event/event_view.xml
@@ -65,13 +65,19 @@
-
-
-
+
+
+
diff --git a/addons/fleet/fleet.py b/addons/fleet/fleet.py
index 8aea73ba405..0e964cafc80 100644
--- a/addons/fleet/fleet.py
+++ b/addons/fleet/fleet.py
@@ -313,6 +313,20 @@ class fleet_vehicle(osv.Model):
except ValueError:
model_id = False
return model_id
+
+ def _count_all(self, cr, uid, ids, field_name, arg, context=None):
+ res = dict(map(lambda x: (x,{'odometer_count': 0, 'fuel_logs_count': 0, 'service_count': 0, 'contract_count': 0, 'cost_count': 0,}), ids))
+ try:
+ for costs in self.browse(cr, uid, ids, context=context):
+ res[costs.id] = {'odometer_count': len(costs.odometer_ids),
+ 'fuel_logs_count': len(costs.log_fuel),
+ 'service_count': len(costs.log_services),
+ 'contract_count': len(costs.log_contracts),
+ 'cost_count': len(costs.costs_ids)
+ }
+ except:
+ pass
+ return res
_name = 'fleet.vehicle'
_description = 'Information on a vehicle'
@@ -327,6 +341,13 @@ class fleet_vehicle(osv.Model):
'log_fuel': fields.one2many('fleet.vehicle.log.fuel', 'vehicle_id', 'Fuel Logs'),
'log_services': fields.one2many('fleet.vehicle.log.services', 'vehicle_id', 'Services Logs'),
'log_contracts': fields.one2many('fleet.vehicle.log.contract', 'vehicle_id', 'Contracts'),
+ 'costs_ids': fields.one2many('fleet.vehicle.cost', 'vehicle_id', 'Costs'),
+ 'odometer_ids': fields.one2many('fleet.vehicle.odometer', 'vehicle_id', 'Odometer'),
+ 'cost_count': fields.function(_count_all, type='integer', string="Costs" , multi=True),
+ 'contract_count': fields.function(_count_all, type='integer', string='Contracts', multi=True),
+ 'service_count': fields.function(_count_all, type='integer', string='Services', multi=True),
+ 'fuel_logs_count': fields.function(_count_all, type='integer', string='Fuel Logs', multi=True),
+ 'odometer_count': fields.function(_count_all, type='integer', string='Odometer', multi=True),
'acquisition_date': fields.date('Acquisition Date', required=False, help='Date when the vehicle has been bought'),
'color': fields.char('Color', size=32, help='Color of the vehicle'),
'state_id': fields.many2one('fleet.vehicle.state', 'State', help='Current state of the vehicle', ondelete="set null"),
diff --git a/addons/fleet/fleet_view.xml b/addons/fleet/fleet_view.xml
index d8c47e43b9d..e4cdbe886f7 100644
--- a/addons/fleet/fleet_view.xml
+++ b/addons/fleet/fleet_view.xml
@@ -211,11 +211,46 @@