[ADD] account_cost_center

This commit is contained in:
Andrea Stirpe
2017-01-11 15:04:57 +01:00
committed by Andrea
parent 3a53ba8f7d
commit dc522ca4ce
19 changed files with 474 additions and 0 deletions

View File

@@ -0,0 +1,74 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
===========
Cost Center
===========
This module allows the user to link every invoice line to a cost center
providing an extra dimension for the analysis.
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.
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.
This module adds the cost center concept to the reporting module.
**Accounting > Invoice Analysis**
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
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.
Credits
=======
Images
------
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_.
Contributors
------------
* Kevin Graveman <k.graveman@onestein.nl>
* Richard Dijkstra <r.dijkstra@onestein.nl>
* Andrea Stirpe <a.stirpe@onestein.nl>
* Antonio Esposito <a.esposito@onestein.nl>
Maintainer
----------
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
To contribute to this module, please visit https://odoo-community.org.

View File

@@ -0,0 +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).
from . import models

View File

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

View File

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

View File

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

View File

@@ -0,0 +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).
from openerp import api, fields, models
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
cost_center_id = fields.Many2one(
'account.cost.center',
string='Cost Center',
help='Default Cost Center'
)
@api.model
def line_get_convert(self, line, part, date):
res = super(AccountInvoice, self).line_get_convert(line, part, date)
if line.get('cost_center_id'):
res['cost_center_id'] = line['cost_center_id']
return res

View File

@@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import api, fields, models
class AccountInvoiceLine(models.Model):
_inherit = 'account.invoice.line'
@api.model
def _default_cost_center(self):
return self.env['account.cost.center'].browse(
self._context.get('cost_center_id'))
cost_center_id = fields.Many2one(
'account.cost.center',
string='Cost Center',
index=True,
default=_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

@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models
class AccountInvoiceReport(models.Model):
_inherit = 'account.invoice.report'
cost_center_id = fields.Many2one(
'account.cost.center',
string='Cost Center',
readonly=True
)
account_analytic_id = fields.Many2one(
'account.analytic.account',
string='Analytic Account',
readonly=True
)
def _select(self):
return super(AccountInvoiceReport, self)._select() + \
", sub.cost_center_id as cost_center_id, " + \
"sub.account_analytic_id as account_analytic_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"
def _group_by(self):
return super(AccountInvoiceReport, self)._group_by() + \
", ail.cost_center_id, " + \
"ail.account_analytic_id"

View File

@@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
# Copyright 2015-2017 Onestein (<http://www.onestein.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import fields, models
class AccountMoveLine(models.Model):
_inherit = 'account.move.line'
cost_center_id = fields.Many2one(
'account.cost.center',
index=True,
string='Cost Center'
)

View File

@@ -0,0 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_account_cost_center_invoice,account.cost.center,model_account_cost_center,account.group_account_invoice,1,0,0,0
access_account_cost_center_user,account.cost.center,model_account_cost_center,account.group_account_user,1,1,1,1
access_account_cost_center_manager,account.cost.center,model_account_cost_center,account.group_account_manager,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_account_cost_center_invoice account.cost.center model_account_cost_center account.group_account_invoice 1 0 0 0
3 access_account_cost_center_user account.cost.center model_account_cost_center account.group_account_user 1 1 1 1
4 access_account_cost_center_manager account.cost.center model_account_cost_center account.group_account_manager 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

View File

@@ -0,0 +1,58 @@
<section class="oe_container">
<div class="oe_row">
<h2 class="oe_slogan">Cost center analysis</h2>
<h3 class="oe_slogan">easy and effective.</h3>
<div class="oe_span6">
<p class='oe_mt32'>
Odoo has many reporting functions. Lacking was the cost center concept which we added in this module.
</p>
<p class='oe_mt32'>
Cost centers can be configured after you made the reporting design.
</p>
</div>
<div class="oe_span6">
<div class="oe_demo oe_picture oe_screenshot">
<img src="account_costcenter_1.png" alt="Costcenter analysis">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row">
<h2 class="oe_slogan">Input on invoice lines</h2>
<div class="oe_span12">
<p class='oe_mt32'>
Cost centers can be selected on invoice lines.
</p>
</div>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img src="account_costcenter_2.png" alt="Costcenter analysis">
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row">
<h2 class="oe_slogan">BI reporting</h2>
<div class="oe_span12">
<p class='oe_mt32'>
Reporting is integrated with the invoice reporting. This reporting is also extended with the analytic accounting.
Cost centers and analytic account will help managing business costs.
</p>
</div>
<div class="oe_span12">
<div class="oe_demo oe_picture oe_screenshot">
<img src="account_costcenter_3.png" alt="Costcenter analysis">
</div>
</div>
</div>
</section>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0"?>
<openerp>
<data>
<!-- 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_group2">
</group>
</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_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_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>
<!-- 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>

View File

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<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>
</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>
</field>
</record>
</data>
</openerp>

View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<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>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<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>
</data>
</openerp>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<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>
</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>
</field>
</record>
</data>
</openerp>