diff --git a/account_cost_center/README.rst b/account_cost_center/README.rst new file mode 100644 index 000000000..2da46954c --- /dev/null +++ b/account_cost_center/README.rst @@ -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 +`_. 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 `_. + +Contributors +------------ + +* Kevin Graveman +* Richard Dijkstra +* Andrea Stirpe +* Antonio Esposito + +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. diff --git a/account_cost_center/__init__.py b/account_cost_center/__init__.py new file mode 100644 index 000000000..218dd5b99 --- /dev/null +++ b/account_cost_center/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import models diff --git a/account_cost_center/__openerp__.py b/account_cost_center/__openerp__.py new file mode 100644 index 000000000..854cdff28 --- /dev/null +++ b/account_cost_center/__openerp__.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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, +} diff --git a/account_cost_center/models/__init__.py b/account_cost_center/models/__init__.py new file mode 100644 index 000000000..de7ebfff4 --- /dev/null +++ b/account_cost_center/models/__init__.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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 diff --git a/account_cost_center/models/account_cost_center.py b/account_cost_center/models/account_cost_center.py new file mode 100644 index 000000000..8347f3695 --- /dev/null +++ b/account_cost_center/models/account_cost_center.py @@ -0,0 +1,19 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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 + ) diff --git a/account_cost_center/models/account_invoice.py b/account_cost_center/models/account_invoice.py new file mode 100644 index 000000000..b583b0396 --- /dev/null +++ b/account_cost_center/models/account_invoice.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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 diff --git a/account_cost_center/models/account_invoice_line.py b/account_cost_center/models/account_invoice_line.py new file mode 100644 index 000000000..310cf7bed --- /dev/null +++ b/account_cost_center/models/account_invoice_line.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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 diff --git a/account_cost_center/models/account_invoice_report.py b/account_cost_center/models/account_invoice_report.py new file mode 100644 index 000000000..599205901 --- /dev/null +++ b/account_cost_center/models/account_invoice_report.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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" diff --git a/account_cost_center/models/account_move_line.py b/account_cost_center/models/account_move_line.py new file mode 100644 index 000000000..cd4c08d58 --- /dev/null +++ b/account_cost_center/models/account_move_line.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# Copyright 2015-2017 Onestein () +# 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' + ) diff --git a/account_cost_center/security/ir.model.access.csv b/account_cost_center/security/ir.model.access.csv new file mode 100644 index 000000000..0e0f7a0c8 --- /dev/null +++ b/account_cost_center/security/ir.model.access.csv @@ -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 diff --git a/account_cost_center/static/description/account_costcenter_1.png b/account_cost_center/static/description/account_costcenter_1.png new file mode 100644 index 000000000..994c3d5fe Binary files /dev/null and b/account_cost_center/static/description/account_costcenter_1.png differ diff --git a/account_cost_center/static/description/account_costcenter_2.png b/account_cost_center/static/description/account_costcenter_2.png new file mode 100644 index 000000000..b7ef54ee4 Binary files /dev/null and b/account_cost_center/static/description/account_costcenter_2.png differ diff --git a/account_cost_center/static/description/account_costcenter_3.png b/account_cost_center/static/description/account_costcenter_3.png new file mode 100644 index 000000000..147c754a8 Binary files /dev/null and b/account_cost_center/static/description/account_costcenter_3.png differ diff --git a/account_cost_center/static/description/index.html b/account_cost_center/static/description/index.html new file mode 100644 index 000000000..dc0671b62 --- /dev/null +++ b/account_cost_center/static/description/index.html @@ -0,0 +1,58 @@ +
+
+

Cost center analysis

+

easy and effective.

+
+

+ Odoo has many reporting functions. Lacking was the cost center concept which we added in this module. +

+

+ Cost centers can be configured after you made the reporting design. +

+
+ +
+
+ Costcenter analysis +
+
+ +
+
+ + +
+
+

Input on invoice lines

+
+

+ Cost centers can be selected on invoice lines. +

+
+
+
+ Costcenter analysis +
+
+ +
+
+ + +
+
+

BI reporting

+
+

+ 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. +

+
+
+
+ Costcenter analysis +
+
+ +
+
diff --git a/account_cost_center/views/account_cost_center.xml b/account_cost_center/views/account_cost_center.xml new file mode 100644 index 000000000..4d8e57251 --- /dev/null +++ b/account_cost_center/views/account_cost_center.xml @@ -0,0 +1,78 @@ + + + + + + + account.cost.center + +
+ + +
+
+
+ + + + + + + + + +
+
+
+
+ + + account.cost.center + + + + + + + + + + account.cost.center + + + + + + + + + Cost Centers + ir.actions.act_window + account.cost.center + form + tree,form + + +

+ Click to add a new event. +

+

+ Cost centers provide an extra analytic dimension +

+
+
+ + + + +
+
diff --git a/account_cost_center/views/account_invoice.xml b/account_cost_center/views/account_invoice.xml new file mode 100644 index 000000000..1ee1b7d32 --- /dev/null +++ b/account_cost_center/views/account_invoice.xml @@ -0,0 +1,38 @@ + + + + + + account.invoice + + + + + + + + + + cost_center_id + + + + + + account.invoice + + + + + + + + + + cost_center_id + + + + + + diff --git a/account_cost_center/views/account_invoice_report.xml b/account_cost_center/views/account_invoice_report.xml new file mode 100644 index 000000000..e525d4575 --- /dev/null +++ b/account_cost_center/views/account_invoice_report.xml @@ -0,0 +1,17 @@ + + + + + + account.invoice.report + + + + + + + + + + + diff --git a/account_cost_center/views/account_move.xml b/account_cost_center/views/account_move.xml new file mode 100644 index 000000000..81d2cdb6c --- /dev/null +++ b/account_cost_center/views/account_move.xml @@ -0,0 +1,19 @@ + + + + + + account.move + + + + + + + + + + + + + diff --git a/account_cost_center/views/account_move_line.xml b/account_cost_center/views/account_move_line.xml new file mode 100644 index 000000000..f476c5b4a --- /dev/null +++ b/account_cost_center/views/account_move_line.xml @@ -0,0 +1,27 @@ + + + + + + account.move.line + + + + + + + + + + account.move.line + + 1 + + + + + + + + +