diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index c23f0c37115..1b4795f02a8 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -1780,7 +1780,7 @@ class res_partner(osv.osv): """ Inherits partner and adds invoice information in the partner form """ _inherit = 'res.partner' _columns = { - 'invoice_ids': fields.one2many('account.invoice.line', 'partner_id', 'Invoices', readonly=True), + 'invoice_ids': fields.one2many('account.invoice', 'partner_id', 'Invoices', readonly=True), } def _find_accounting_partner(self, partner): diff --git a/addons/account/partner.py b/addons/account/partner.py index f24ffcf55b4..df4c1ec4888 100644 --- a/addons/account/partner.py +++ b/addons/account/partner.py @@ -162,6 +162,29 @@ class res_partner(osv.osv): def _debit_search(self, cr, uid, obj, name, args, context=None): return self._asset_difference_search(cr, uid, obj, name, 'payable', args, context=context) + def _invoice_total(self, cr, uid, ids, field_name, arg, context=None): + result = {} + account_invoice_report = self.pool.get('account.invoice.report') + for partner in self.browse(cr, uid, ids, context=context): + invoice_ids = account_invoice_report.search(cr, uid, [('partner_id','child_of',partner.id)], context=context) + invoices = account_invoice_report.browse(cr, uid, invoice_ids, context=context) + result[partner.id] = sum(inv.user_currency_price_total for inv in invoices) + return result + + def _journal_item_count(self, cr, uid, ids, field_name, arg, context=None): + res = dict(map(lambda x: (x,{'journal_item_count': 0, 'contracts_count': 0 }), ids)) + + # the user may not have access rights + try: + for partner in self.browse(cr, uid, ids, context=context): + res[partner.id] = { + 'journal_item_count': len(partner.journal_item_ids), + 'contracts_count': len(partner.contract_ids) + } + except: + pass + return res + def has_something_to_reconcile(self, cr, uid, partner_id, context=None): ''' at least a debit, a credit and a line older than the last reconciliation date of the partner @@ -190,6 +213,10 @@ class res_partner(osv.osv): fnct_search=_credit_search, string='Total Receivable', multi='dc', help="Total amount this customer owes you."), 'debit': fields.function(_credit_debit_get, fnct_search=_debit_search, string='Total Payable', multi='dc', help="Total amount you have to pay to this supplier."), 'debit_limit': fields.float('Payable Limit'), + 'total_invoiced': fields.function(_invoice_total, string="Total Invoiced", type='float'), + 'contracts_count': fields.function(_journal_item_count, string="Contracts", type='integer', multi="invoice_journal"), + 'journal_item_ids': fields.one2many('account.move.line', 'partner_id', 'Journal Items'), + 'journal_item_count': fields.function(_journal_item_count, string="Journal Items", type="integer", multi="invoice_journal"), 'property_account_payable': fields.property( type='many2one', relation='account.account', diff --git a/addons/account/partner_view.xml b/addons/account/partner_view.xml index 829ce8dc0f0..0fa21444a09 100644 --- a/addons/account/partner_view.xml +++ b/addons/account/partner_view.xml @@ -64,13 +64,21 @@ - + + diff --git a/addons/account_analytic_default/account_analytic_default.py b/addons/account_analytic_default/account_analytic_default.py index 563a6a3eb9a..1faf75d5eee 100644 --- a/addons/account_analytic_default/account_analytic_default.py +++ b/addons/account_analytic_default/account_analytic_default.py @@ -114,6 +114,19 @@ class sale_order_line(osv.osv): if rec: inv_line_obj.write(cr, uid, [line.id], {'account_analytic_id': rec.analytic_id.id}, context=context) return create_ids - +class product_product(osv.Model): + _inherit = 'product.product' + def _rules_count(self, cr, uid, ids, field_name, arg, context=None): + res = dict(map(lambda x: (x,0), ids)) + try: + for rule in self.browse(cr, uid, ids, context=context): + res[rule.id] = len(rule.rules_ids) + except: + pass + return res + _columns = { + 'rules_ids': fields.one2many('account.analytic.default', 'product_id', 'Analytic Rules '), + 'rules_count': fields.function(_rules_count, string='# Analytic Rules', type='integer'), + } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/account_analytic_default/account_analytic_default_view.xml b/addons/account_analytic_default/account_analytic_default_view.xml index 8ff323e45c7..38f51a9ef20 100644 --- a/addons/account_analytic_default/account_analytic_default_view.xml +++ b/addons/account_analytic_default/account_analytic_default_view.xml @@ -80,7 +80,10 @@ - diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 7041c3aafbf..ebeb0cb8e25 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -237,9 +237,17 @@ class account_asset_asset(osv.osv): if salvage_value: val['value_residual'] = purchase_value - salvage_value return {'value': val} - + def _entry_count(self, cr, uid, ids, field_name, arg, context=None): + res = dict(map(lambda x: (x,0), ids)) + try: + for entry in self.browse(cr, uid, ids, context=context): + res[entry.id] = len(entry.account_move_line_ids) + except: + pass + return res _columns = { 'account_move_line_ids': fields.one2many('account.move.line', 'asset_id', 'Entries', readonly=True, states={'draft':[('readonly',False)]}), + 'entry_count': fields.function(_entry_count, string='# Asset Entries', type='integer'), 'name': fields.char('Asset Name', size=64, required=True, readonly=True, states={'draft':[('readonly',False)]}), 'code': fields.char('Reference', size=32, readonly=True, states={'draft':[('readonly',False)]}), 'purchase_value': fields.float('Gross Value', required=True, readonly=True, states={'draft':[('readonly',False)]}), diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index fe1fcf473ba..b0a5deacfcb 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -84,7 +84,9 @@
-
- diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index 0ccdcc2243f..db7ca79ff11 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -215,7 +215,14 @@ class crm_lead(format_address, osv.osv): duration = len(no_days) res[lead.id][field] = abs(int(duration)) return res - + def _meeting_count(self, cr, uid, ids, field_name, arg, context=None): + res = dict(map(lambda x: (x,0), ids)) + try: + for meeting in self.browse(cr, uid, ids, context=context): + res[meeting.id] = len(meeting.meeting_ids) + except: + pass + return res _columns = { 'partner_id': fields.many2one('res.partner', 'Partner', ondelete='set null', track_visibility='onchange', select=True, help="Linked partner (optional). Usually created when converting the lead."), @@ -290,6 +297,8 @@ class crm_lead(format_address, osv.osv): 'payment_mode': fields.many2one('crm.payment.mode', 'Payment Mode', \ domain="[('section_id','=',section_id)]"), 'planned_cost': fields.float('Planned Costs'), + 'meeting_ids': fields.one2many('calendar.event', 'opportunity_id', 'Opportunities'), + 'meeting_count': fields.function(_meeting_count, string='# Meetings', type='integer'), } _defaults = { diff --git a/addons/crm/crm_lead_view.xml b/addons/crm/crm_lead_view.xml index 095cda029ed..dc297492020 100644 --- a/addons/crm/crm_lead_view.xml +++ b/addons/crm/crm_lead_view.xml @@ -103,9 +103,11 @@
-