[9.0][MIG] account_cost_center

This commit is contained in:
Andrea
2019-05-23 15:17:17 +02:00
parent bef64b9b2e
commit 6e6be10c2d
17 changed files with 271 additions and 198 deletions

View File

@@ -1,5 +1,5 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
.. image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: https://www.gnu.org/licenses/agpl
:alt: License: AGPL-3
===========
@@ -15,12 +15,14 @@ Usage
This module is relevant when you are creating sales invoices and using analytic accounting.
Start using cost centers by defining the cost centers. Be aware that Analytic Accounting must be activated on the user for the following menu option.
Start using cost centers by defining the cost centers. Be aware that Analytic Accounting
must be activated on the user for the following menu option.
Use the menu in the accounting module:
**Configuration > Analytics accounting > Cost centers**
Once defined you can add a cost center to an invoice line. A default cost center for the current invoice can be set in the other info tab.
Once defined you can add a cost center to an invoice line. A default cost center for
the current invoice can be set in the other info tab.
This module adds the cost center concept to the reporting module.
@@ -31,7 +33,7 @@ Here you can select or unselect the cost center within your analysis.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/92/8.0
:target: https://runbot.odoo-community.org/runbot/92/9.0
Bug Tracker
@@ -40,7 +42,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/account-financial-tools/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smashing it by providing a detailed and welcomed.
help us smash it by providing detailed and welcomed feedback.
Credits
=======

View File

@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import models

View File

@@ -1,21 +1,22 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2016-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
{
'name': 'Costcenter',
'summary': 'Cost center information for invoice lines',
'author': 'ONESTEiN BV,Odoo Community Association (OCA)',
'author': 'Onestein, Odoo Community Association (OCA)',
'license': 'AGPL-3',
'website': 'http://www.onestein.eu',
'website': 'https://github.com/OCA/account-financial-tools/',
'category': 'Accounting',
'version': '8.0.1.0.0',
'version': '9.0.1.0.0',
'depends': [
'account',
'base_view_inheritance_extension'
],
'data': [
'security/ir.model.access.csv',
'security/account_cost_center_security.xml',
'views/account_cost_center.xml',
'views/account_move.xml',
'views/account_move_line.xml',

View File

@@ -1,6 +1,5 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import account_move_line
from . import account_invoice

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp import fields, models
@@ -12,8 +12,7 @@ class AccountCostCenter(models.Model):
name = fields.Char(string='Title', required=True)
code = fields.Char(required=True)
company_id = fields.Many2one(
comodel_name='res.company',
'res.company',
string='Company',
required=True,
default=lambda self: self.env.user.company_id
)

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015-2019 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp import api, fields, models
@@ -11,12 +11,26 @@ class AccountInvoice(models.Model):
cost_center_id = fields.Many2one(
'account.cost.center',
string='Cost Center',
help='Default Cost Center'
readonly=True,
states={'draft': [('readonly', False)]},
help='Default Cost Center',
)
@api.model
def line_get_convert(self, line, part, date):
res = super(AccountInvoice, self).line_get_convert(line, part, date)
def line_get_convert(self, line, part):
res = super(AccountInvoice, self).line_get_convert(line, part)
if line.get('cost_center_id'):
res['cost_center_id'] = line['cost_center_id']
return res
@api.model
def invoice_line_move_line_get(self):
res = super(AccountInvoice, self).invoice_line_move_line_get()
for dict_data in res:
invl_id = dict_data.get('invl_id')
line = self.env['account.invoice.line'].browse(invl_id)
if line.cost_center_id:
dict_data['cost_center_id'] = line.cost_center_id.id
return res

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp import api, fields, models
@@ -17,12 +17,5 @@ class AccountInvoiceLine(models.Model):
'account.cost.center',
string='Cost Center',
index=True,
default=_default_cost_center
default=lambda self: self._default_cost_center(),
)
@api.model
def move_line_get_item(self, line):
res = super(AccountInvoiceLine, self).move_line_get_item(line)
if line.cost_center_id:
res['cost_center_id'] = line.cost_center_id.id
return res

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp import fields, models
@@ -21,15 +21,12 @@ class AccountInvoiceReport(models.Model):
def _select(self):
return super(AccountInvoiceReport, self)._select() + \
", sub.cost_center_id as cost_center_id, " + \
"sub.account_analytic_id as account_analytic_id"
", sub.cost_center_id as cost_center_id"
def _sub_select(self):
return super(AccountInvoiceReport, self)._sub_select() + \
", ail.cost_center_id as cost_center_id, " + \
"ail.account_analytic_id as account_analytic_id"
", ail.cost_center_id as cost_center_id"
def _group_by(self):
return super(AccountInvoiceReport, self)._group_by() + \
", ail.cost_center_id, " + \
"ail.account_analytic_id"
", ail.cost_center_id"

View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
# Copyright 2015-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp import fields, models

View File

@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<record id="account_cost_center_comp_rule" model="ir.rule">
<field name="name">Cost center multi company rule</field>
<field name="model_id" ref="account_cost_center.model_account_cost_center"/>
<field name="global" eval="True"/>
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,4 @@
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from . import test_cost_center

View File

@@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
# Copyright 2017-2018 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
from openerp.addons.account.tests.account_test_classes\
import AccountingTestCase
class TestAccountCostCenter(AccountingTestCase):
def test_invoice_costcenter(self):
Account = self.env['account.account']
CostCenter = self.env['account.cost.center']
InvLine = self.env['account.invoice.line']
acc_rec = self.env.ref('account.data_account_type_receivable')
acc_exp = self.env.ref('account.data_account_type_expenses')
invoice_account = Account.search([
('user_type_id', '=', acc_rec.id)
], limit=1).id
invoice_line_account = Account.search([
('user_type_id', '=', acc_exp.id)],
limit=1).id
invoice = self.env['account.invoice'].create({
'partner_id': self.env.ref('base.res_partner_2').id,
'account_id': invoice_account,
'type': 'in_invoice',
})
line1 = InvLine.create({
'product_id': self.env.ref('product.product_product_2').id,
'quantity': 1.0,
'price_unit': 100.0,
'invoice_id': invoice.id,
'name': 'product that cost 100',
'account_id': invoice_line_account,
})
empty_cost_center = CostCenter.browse()
self.assertTrue(
(line1.cost_center_id == empty_cost_center),
"Default cost center per line not set")
costcenter = CostCenter.create({
'name': 'Cost Center Test',
'code': 'CC1',
'company_id': self.env.user.company_id.id
})
invoice.cost_center_id = costcenter
line2 = InvLine.with_context(cost_center_id=costcenter.id).create({
'product_id': self.env.ref('product.product_product_4').id,
'quantity': 1.0,
'price_unit': 130.0,
'invoice_id': invoice.id,
'name': 'product that cost 130',
'account_id': invoice_line_account,
})
self.assertTrue(
(line2.cost_center_id == costcenter),
"Default cost center per line set")
invoice.signal_workflow('invoice_open')

View File

@@ -1,78 +1,78 @@
<?xml version="1.0"?>
<openerp>
<data>
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Cost Center views -->
<record id="account_cost_center_form" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
<!-- Cost Center views -->
<record id="account_cost_center_form" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<form>
<sheet>
<group>
<div class="oe_title">
<label for="name"/>
<h1>
<field name="name"/>
</h1>
</div>
</group>
<group name="main_group">
<group name="main_group1">
<field name="code"/>
</group>
<group name="main_group">
<group name="main_group1">
<field name="code"/>
</group>
<group name="main_group2">
</group>
<group name="main_group2">
<field name="company_id" options="{'no_create': True}" groups="base.group_multi_company"/>
</group>
<notebook name="notebook">
</notebook>
</sheet>
</form>
</field>
</record>
</group>
<notebook name="notebook">
</notebook>
</sheet>
</form>
</field>
</record>
<record id="account_cost_center_tree" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<tree string="Cost Centers">
<field name="code"/>
<field name="name"/>
</tree>
</field>
</record>
<record id="account_cost_center_tree" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<tree>
<field name="code"/>
<field name="name"/>
<field name="company_id" groups="base.group_multi_company"/>
</tree>
</field>
</record>
<record id="account_cost_center_filter" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<search string="Cost Centers">
<field name="name" string="Name/Code" filter_domain="['|', ('code','ilike', self), ('name','ilike',self)]"/>
</search>
</field>
</record>
<record id="account_cost_center_filter" model="ir.ui.view">
<field name="model">account.cost.center</field>
<field name="arch" type="xml">
<search>
<field name="name" string="Name/Code" filter_domain="['|', ('code','ilike', self), ('name','ilike',self)]"/>
</search>
</field>
</record>
<record id="account_cost_center_action" model="ir.actions.act_window">
<field name="name">Cost Centers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.cost.center</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="account_cost_center_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a new event.
</p>
<p>
Cost centers provide an extra analytic dimension
</p>
</field>
</record>
<record id="account_cost_center_action" model="ir.actions.act_window">
<field name="name">Cost Centers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">account.cost.center</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="search_view_id" ref="account_cost_center_filter"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a new cost center.
</p>
<p>
Cost centers provide an extra analytic dimension
</p>
</field>
</record>
<!-- Cost Center menu-->
<menuitem id="cost_center_menu"
name="Cost Centers"
parent="account.menu_analytic_accounting"
action="account_cost_center_action"
groups="account.group_account_user"
sequence="40"/>
<!-- Cost Center menu-->
<menuitem id="cost_center_menu"
name="Cost Centers"
parent="account.menu_analytic_accounting"
action="account_cost_center_action"
groups="account.group_account_user"
sequence="40"/>
</data>
</openerp>
</odoo>

View File

@@ -1,38 +1,36 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="invoice_form_inherit" model="ir.ui.view">
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="cost_center_id"/>
</field>
<xpath expr="//page[@string='Invoice Lines']/field[@name='invoice_line']/tree/field[@name='account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
<field name="invoice_line" position="attributes">
<attribute name="context" operation="python_dict" key="cost_center_id">cost_center_id</attribute>
</field>
<record id="invoice_form_inherit" model="ir.ui.view">
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_form"/>
<field name="arch" type="xml">
<field name="date_invoice" position="after">
<field name="cost_center_id"/>
</field>
</record>
<record id="invoice_supplier_form_inherit" model="ir.ui.view">
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_supplier_form"/>
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="cost_center_id"/>
</field>
<xpath expr="//tree[@string='Invoice lines']/field[@name='account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
<field name="invoice_line" position="attributes">
<attribute name="context" operation="python_dict" key="cost_center_id">cost_center_id</attribute>
</field>
<xpath expr="//field[@name='invoice_line_ids']/tree/field[@name='account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
<field name="invoice_line_ids" position="attributes">
<attribute name="context" operation="python_dict" key="cost_center_id">cost_center_id</attribute>
</field>
</record>
</field>
</record>
</data>
</openerp>
<record id="invoice_supplier_form_inherit" model="ir.ui.view">
<field name="model">account.invoice</field>
<field name="inherit_id" ref="account.invoice_supplier_form"/>
<field name="arch" type="xml">
<field name="origin" position="after">
<field name="cost_center_id"/>
</field>
<xpath expr="//field[@name='invoice_line_ids']/tree/field[@name='account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
<field name="invoice_line_ids" position="attributes">
<attribute name="context" operation="python_dict" key="cost_center_id">cost_center_id</attribute>
</field>
</field>
</record>
</odoo>

View File

@@ -1,17 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="view_account_invoice_report_search" model="ir.ui.view">
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.view_account_invoice_report_search"/>
<field name="arch" type="xml">
<filter name="user" position="after">
<filter string="Analytic Account" context="{'group_by':'account_analytic_id'}" />
<filter string="Cost Center" context="{'group_by':'cost_center_id'}" />
</filter>
</field>
</record>
<record id="view_account_invoice_report_search" model="ir.ui.view">
<field name="model">account.invoice.report</field>
<field name="inherit_id" ref="account.view_account_invoice_report_search"/>
<field name="arch" type="xml">
<filter name="user" position="after">
<filter string="Analytic Account" context="{'group_by':'account_analytic_id'}" />
<filter string="Cost Center" context="{'group_by':'cost_center_id'}" />
</filter>
</field>
</record>
</data>
</openerp>
</odoo>

View File

@@ -1,19 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="move_form_cost_center" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook//field[@name='line_id']/form//field[@name='analytic_account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
<xpath expr="//notebook//field[@name='line_id']/tree/field[@name='analytic_account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
</field>
</record>
<record id="move_form_cost_center" model="ir.ui.view">
<field name="model">account.move</field>
<field name="inherit_id" ref="account.view_move_form"/>
<field name="arch" type="xml">
<xpath expr="//notebook//field[@name='line_ids']/tree/field[@name='analytic_account_id']" position="after">
<field name="cost_center_id"/>
</xpath>
</field>
</record>
</data>
</openerp>
</odoo>

View File

@@ -1,27 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<odoo>
<record id="move_line_form_cost_center" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="after">
<field name="cost_center_id"/>
</field>
<record id="move_line_form_cost_center" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_form"/>
<field name="arch" type="xml">
<field name="analytic_account_id" position="after">
<field name="cost_center_id"/>
</field>
</record>
</field>
</record>
<record id="move_line_tree_cost_center" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="priority">1</field>
<field name="arch" type="xml">
<field name="analytic_account_id" position="after">
<field name="cost_center_id"/>
</field>
<record id="move_line_tree_cost_center" model="ir.ui.view">
<field name="model">account.move.line</field>
<field name="inherit_id" ref="account.view_move_line_tree"/>
<field name="priority">1</field>
<field name="arch" type="xml">
<field name="analytic_account_id" position="after">
<field name="cost_center_id"/>
</field>
</record>
</field>
</record>
</data>
</openerp>
</odoo>