Skip to content

Commit 687a618

Browse files
[16.0][ADD] account_invoice_analytic_header: Allows you to assign an analytical account to the purchase invoice header and drag it to the lines.
1 parent d8c353a commit 687a618

File tree

11 files changed

+277
-0
lines changed

11 files changed

+277
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
2+
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
3+
:alt: License: AGPL-3
4+
5+
===============================
6+
Account invoice analytic header
7+
===============================
8+
9+
* Allows you to assign an analytical account to the purchase invoice header and
10+
drag it to the lines.
11+
* To view the field "Analytic Account", you must be in the "Analytic Accounting"
12+
group.
13+
14+
Bug Tracker
15+
===========
16+
17+
Bugs are tracked on `GitHub Issues
18+
<https://github.com/avanzosc/odoo-addons/issues>`_. In case of trouble, please
19+
check there if your issue has already been reported. If you spotted it first,
20+
help us smash it by providing detailed and welcomed feedback.
21+
22+
Credits
23+
=======
24+
25+
Contributors
26+
------------
27+
* Ana Juaristi <anajuaristi@avanzosc.es>
28+
* Alfredo de la Fuente <alfredodelafuente@avanzosc.es>
29+
30+
Do not contact contributors directly about support or help with technical issues.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import models
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Copyright 2025 Alfredo de la Fuente - AvanzOSC
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
3+
{
4+
"name": "Account Invoice Analytic Header",
5+
"version": "16.0.1.0.0",
6+
"license": "AGPL-3",
7+
"author": "AvanzOSC",
8+
"website": "https://github.com/avanzosc/odoo-addons",
9+
"category": "Accounting",
10+
"summary": "Allows you to assign an analytical account to the purchase "
11+
"invoice header and drag it to the lines.",
12+
"depends": ["account", "analytic"],
13+
"data": [
14+
"views/account_invoice_views.xml",
15+
],
16+
"installable": True,
17+
"application": False,
18+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Translation of Odoo Server.
2+
# This file contains the translation of the following modules:
3+
# * account_invoice_analytic_header
4+
#
5+
msgid ""
6+
msgstr ""
7+
"Project-Id-Version: Odoo Server 16.0\n"
8+
"Report-Msgid-Bugs-To: \n"
9+
"POT-Creation-Date: 2025-10-29 08:05+0000\n"
10+
"PO-Revision-Date: 2025-10-29 08:05+0000\n"
11+
"Last-Translator: \n"
12+
"Language-Team: \n"
13+
"MIME-Version: 1.0\n"
14+
"Content-Type: text/plain; charset=UTF-8\n"
15+
"Content-Transfer-Encoding: \n"
16+
"Plural-Forms: \n"
17+
18+
#. module: account_invoice_analytic_header
19+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_bank_statement_line__analytic_account_id
20+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_move__analytic_account_id
21+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_payment__analytic_account_id
22+
#: model_terms:ir.ui.view,arch_db:account_invoice_analytic_header.view_account_invoice_filter
23+
#: model_terms:ir.ui.view,arch_db:account_invoice_analytic_header.view_move_form
24+
msgid "Analytic Account"
25+
msgstr ""
26+
27+
#. module: account_invoice_analytic_header
28+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_move_line__analytic_account_id
29+
msgid "Analytic account"
30+
msgstr ""
31+
32+
#. module: account_invoice_analytic_header
33+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_bank_statement_line__analytic_account_id
34+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_move__analytic_account_id
35+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_payment__analytic_account_id
36+
msgid "Analytic account applied by default to invoice lines."
37+
msgstr ""
38+
39+
#. module: account_invoice_analytic_header
40+
#: model:ir.model,name:account_invoice_analytic_header.model_account_move
41+
msgid "Journal Entry"
42+
msgstr ""
43+
44+
#. module: account_invoice_analytic_header
45+
#: model:ir.model,name:account_invoice_analytic_header.model_account_move_line
46+
msgid "Journal Item"
47+
msgstr ""
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# Translation of Odoo Server.
2+
# This file contains the translation of the following modules:
3+
# * account_invoice_analytic_header
4+
#
5+
msgid ""
6+
msgstr ""
7+
"Project-Id-Version: Odoo Server 16.0\n"
8+
"Report-Msgid-Bugs-To: \n"
9+
"POT-Creation-Date: 2025-10-29 08:05+0000\n"
10+
"PO-Revision-Date: 2025-10-29 08:05+0000\n"
11+
"Last-Translator: \n"
12+
"Language-Team: \n"
13+
"MIME-Version: 1.0\n"
14+
"Content-Type: text/plain; charset=UTF-8\n"
15+
"Content-Transfer-Encoding: \n"
16+
"Plural-Forms: \n"
17+
18+
#. module: account_invoice_analytic_header
19+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_bank_statement_line__analytic_account_id
20+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_move__analytic_account_id
21+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_payment__analytic_account_id
22+
#: model_terms:ir.ui.view,arch_db:account_invoice_analytic_header.view_account_invoice_filter
23+
#: model_terms:ir.ui.view,arch_db:account_invoice_analytic_header.view_move_form
24+
msgid "Analytic Account"
25+
msgstr "Cuenta analítica"
26+
27+
#. module: account_invoice_analytic_header
28+
#: model:ir.model.fields,field_description:account_invoice_analytic_header.field_account_move_line__analytic_account_id
29+
msgid "Analytic account"
30+
msgstr "Cuenta analítica"
31+
32+
#. module: account_invoice_analytic_header
33+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_bank_statement_line__analytic_account_id
34+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_move__analytic_account_id
35+
#: model:ir.model.fields,help:account_invoice_analytic_header.field_account_payment__analytic_account_id
36+
msgid "Analytic account applied by default to invoice lines."
37+
msgstr "Cuenta analítica aplicada por defecto a las líneas de factura."
38+
39+
#. module: account_invoice_analytic_header
40+
#: model:ir.model,name:account_invoice_analytic_header.model_account_move
41+
msgid "Journal Entry"
42+
msgstr "Asiento contable"
43+
44+
#. module: account_invoice_analytic_header
45+
#: model:ir.model,name:account_invoice_analytic_header.model_account_move_line
46+
msgid "Journal Item"
47+
msgstr "Apunte contable"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from . import account_move
2+
from . import account_move_line
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright 2025 Alfredo de la Fuente - AvanzOSC
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
3+
from odoo import api, fields, models
4+
5+
6+
class AccountMove(models.Model):
7+
_inherit = "account.move"
8+
9+
analytic_account_id = fields.Many2one(
10+
comodel_name="account.analytic.account",
11+
string="Analytic Account",
12+
help="Analytic account applied by default to invoice lines.",
13+
)
14+
15+
@api.onchange("analytic_account_id")
16+
def _onchange_analytic_account_id(self):
17+
for move in self:
18+
for line in move.invoice_line_ids:
19+
line.analytic_account_id = move.analytic_account_id
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Copyright 2025 Alfredo de la Fuente - AvanzOSC
2+
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
3+
from odoo import api, fields, models
4+
5+
6+
class AccountMoveLine(models.Model):
7+
_inherit = "account.move.line"
8+
9+
analytic_account_id = fields.Many2one(
10+
string="Analytic account", comodel_name="account.analytic.account"
11+
)
12+
13+
@api.model
14+
def create(self, vals):
15+
if not vals.get("analytic_account_id") and vals.get("move_id"):
16+
move = self.env["account.move"].browse(vals["move_id"])
17+
if move.analytic_account_id:
18+
vals["analytic_account_id"] = move.analytic_account_id.id
19+
return super().create(vals)
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
<?xml version="1.0" ?>
2+
<odoo>
3+
<record id="view_move_form" model="ir.ui.view">
4+
<field name="model">account.move</field>
5+
<field name="inherit_id" ref="account.view_move_form" />
6+
<field name="arch" type="xml">
7+
<field name="invoice_vendor_bill_id" position="after">
8+
<label
9+
name="analytic_account"
10+
groups="analytic.group_analytic_accounting"
11+
for="analytic_account_id"
12+
string="Analytic Account"
13+
class="oe_edit_only"
14+
attrs="{'invisible': [('move_type', '!=', 'in_invoice')]}"
15+
/>
16+
<field
17+
name="analytic_account_id"
18+
nolabel="1"
19+
class="oe_edit_only"
20+
groups="analytic.group_analytic_accounting"
21+
attrs="{'invisible': [('move_type', '!=', 'in_invoice')]}"
22+
options="{'no_create': True}"
23+
/>
24+
</field>
25+
<xpath
26+
expr="//field[@name='invoice_line_ids']/tree/field[@name='analytic_distribution']"
27+
position="before"
28+
>
29+
<field
30+
name="analytic_account_id"
31+
groups="analytic.group_analytic_accounting"
32+
optional="show"
33+
options="{'no_create': True}"
34+
/>
35+
</xpath>
36+
<xpath
37+
expr="//field[@name='invoice_line_ids']/form//field[@name='analytic_distribution']"
38+
position="before"
39+
>
40+
<field
41+
name="analytic_account_id"
42+
groups="analytic.group_analytic_accounting"
43+
options="{'no_create': True}"
44+
/>
45+
</xpath>
46+
</field>
47+
</record>
48+
49+
<record id="view_invoice_tree" model="ir.ui.view">
50+
<field name="model">account.move</field>
51+
<field name="inherit_id" ref="account.view_invoice_tree" />
52+
<field name="arch" type="xml">
53+
<field name="invoice_date_due" position="after">
54+
<field
55+
name="analytic_account_id"
56+
class="oe_edit_only"
57+
groups="analytic.group_analytic_accounting"
58+
attrs="{'invisible': [('move_type', '!=', 'in_invoice')]}"
59+
options="{'no_create': True}"
60+
optional="show"
61+
/>
62+
</field>
63+
</field>
64+
</record>
65+
66+
<record id="view_account_invoice_filter" model="ir.ui.view">
67+
<field name="model">account.move</field>
68+
<field name="inherit_id" ref="account.view_account_invoice_filter" />
69+
<field name="arch" type="xml">
70+
<field name="date" position="after">
71+
<field
72+
name="analytic_account_id"
73+
groups="analytic.group_analytic_accounting"
74+
/>
75+
</field>
76+
<filter name="groupy_by_journal" position="after">
77+
<filter
78+
string="Analytic Account"
79+
name="groupy_by_analytic_account"
80+
groups="analytic.group_analytic_accounting"
81+
domain="[]"
82+
context="{'group_by': 'analytic_account_id'}"
83+
/>
84+
</filter>
85+
</field>
86+
</record>
87+
</odoo>
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../../../../account_invoice_analytic_header

0 commit comments

Comments
 (0)