From 9761c7527b9e149f6bba8189b9db6bcbe36bdda0 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Fri, 20 Jan 2017 18:22:37 +0100 Subject: [PATCH] Improvement on invoice lines and analytic accounts --- account_usability/account.py | 26 +++++ account_usability/account_view.xml | 109 ++++++++++++++++++ sale_usability_extension/__init__.py | 1 + .../account_analytic_account.py | 24 ++++ sale_usability_extension/sale_view.xml | 20 ++++ 5 files changed, 180 insertions(+) create mode 100644 sale_usability_extension/account_analytic_account.py diff --git a/account_usability/account.py b/account_usability/account.py index 7acbbc7..ade38f6 100644 --- a/account_usability/account.py +++ b/account_usability/account.py @@ -70,6 +70,28 @@ class AccountInvoice(models.Model): return res +class AccountInvoiceLine(models.Model): + _inherit = 'account.invoice.line' + + # In the 'account' module, we have related stored field for: + # company_id, partner_id + currency_id = fields.Many2one( + related='invoice_id.currency_id', readonly=True, store=True) + invoice_type = fields.Selection( + related='invoice_id.type', store=True, readonly=True) + date_invoice = fields.Date( + related='invoice_id.date_invoice', store=True, readonly=True) + commercial_partner_id = fields.Many2one( + related='invoice_id.partner_id.commercial_partner_id', + store=True, readonly=True) + state = fields.Selection( + related='invoice_id.state', store=True, readonly=True, + string='Invoice State') + invoice_number = fields.Char( + related='invoice_id.move_id.name', store=True, readonly=True, + string='Invoice Number') + + class AccountFiscalYear(models.Model): _inherit = 'account.fiscalyear' @@ -110,6 +132,10 @@ class AccountAccount(models.Model): class AccountAnalyticAccount(models.Model): _inherit = 'account.analytic.account' + invoice_line_ids = fields.One2many( + 'account.invoice.line', 'account_analytic_id', 'Invoice Lines', + readonly=True) + @api.multi def name_get(self): if self._context.get('analytic_account_show_code_only'): diff --git a/account_usability/account_view.xml b/account_usability/account_view.xml index 0104632..ed26841 100644 --- a/account_usability/account_view.xml +++ b/account_usability/account_view.xml @@ -65,6 +65,102 @@ + + + account_usability.invoice_line_tree + account.invoice.line + + + + + + + + + + + + + + 0 + 0 + + + + + + account_usability.invoice_line_search + account.invoice.line + + + + + + + + + + + + + + + + + + + + + + + + + + + + Customer Invoice Lines + account.invoice.line + tree,form + [('invoice_type', '=', 'out_invoice')] + {'show_invoice_fields': True} + + + + Customer Refund Lines + account.invoice.line + tree,form + [('invoice_type', '=', 'out_refund')] + {'show_invoice_fields': True} + + + + Supplier Invoice Lines + account.invoice.line + tree,form + [('invoice_type', '=', 'in_invoice')] + {'show_invoice_fields': True} + + + + Supplier Refund Lines + account.invoice.line + tree,form + [('invoice_type', '=', 'in_refund')] + {'show_invoice_fields': True} + + 200 @@ -249,5 +345,18 @@ + + analytic.analytic.account.form + account.analytic.account + + + + + + + + + + diff --git a/sale_usability_extension/__init__.py b/sale_usability_extension/__init__.py index 581371f..37d6e13 100644 --- a/sale_usability_extension/__init__.py +++ b/sale_usability_extension/__init__.py @@ -2,3 +2,4 @@ from . import sale from . import account_invoice +from . import account_analytic_account diff --git a/sale_usability_extension/account_analytic_account.py b/sale_usability_extension/account_analytic_account.py new file mode 100644 index 0000000..1e21bb3 --- /dev/null +++ b/sale_usability_extension/account_analytic_account.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# © 2017 Akretion (http://www.akretion.com) +# @author Alexis de Lattre + +from openerp import models, fields, api + + +class AccountAnalyticAccount(models.Model): + _inherit = 'account.analytic.account' + + sale_order_count = fields.Integer( + compute='compute_sale_order_count', + string='Number of Quotations/Orders', readonly=True) + sale_ids = fields.One2many( + 'sale.order', 'project_id', string='Quotations/Orders') + + @api.multi + def compute_sale_order_count(self): + for aaa in self: + try: + count = len(aaa.sale_ids) + except: + count = 0 + aaa.sale_order_count = count diff --git a/sale_usability_extension/sale_view.xml b/sale_usability_extension/sale_view.xml index cb0fa20..969883e 100644 --- a/sale_usability_extension/sale_view.xml +++ b/sale_usability_extension/sale_view.xml @@ -75,5 +75,25 @@ + + Quotations and Sales + sale.order + tree,form,graph,calendar + {'search_default_project_id': active_id} + + + + analytic.analytic.account.form + account.analytic.account + + +
+ +
+
+
+