From 331cb37d0a0bc6bffe63038512da918509e41033 Mon Sep 17 00:00:00 2001 From: bobrador Date: Mon, 30 Sep 2024 07:57:33 +0200 Subject: [PATCH] [16.0][ADD] account_analytic_document_date: New module account_analytic_document_date --- account_analytic_document_date.zip | Bin 0 -> 63052 bytes account_analytic_document_date/README.rst | 109 +++++ account_analytic_document_date/__init__.py | 2 + .../__manifest__.py | 23 + account_analytic_document_date/hooks.py | 13 + account_analytic_document_date/i18n/ca_ES.po | 44 ++ account_analytic_document_date/i18n/es.po | 44 ++ .../models/__init__.py | 4 + .../models/account_analytic_line.py | 9 + .../models/account_bank_statement_line.py | 17 + .../models/account_move.py | 21 + .../models/account_move_line.py | 16 + .../readme/CONTRIBUTORS.md | 4 + .../readme/DESCRIPTION.md | 1 + .../readme/USAGE.md | 9 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/icon.svg | 79 +++ .../static/description/index.html | 454 ++++++++++++++++++ .../tests/__init__.py | 1 + .../tests/test_document_date.py | 101 ++++ .../views/account_analytic_line_views.xml | 45 ++ .../account_bank_statement_line_views.xml | 23 + .../views/account_move.xml | 19 + .../addons/account_analytic_document_date | 1 + setup/account_analytic_document_date/setup.py | 6 + 25 files changed, 1045 insertions(+) create mode 100644 account_analytic_document_date.zip create mode 100644 account_analytic_document_date/README.rst create mode 100644 account_analytic_document_date/__init__.py create mode 100644 account_analytic_document_date/__manifest__.py create mode 100644 account_analytic_document_date/hooks.py create mode 100644 account_analytic_document_date/i18n/ca_ES.po create mode 100644 account_analytic_document_date/i18n/es.po create mode 100644 account_analytic_document_date/models/__init__.py create mode 100644 account_analytic_document_date/models/account_analytic_line.py create mode 100644 account_analytic_document_date/models/account_bank_statement_line.py create mode 100644 account_analytic_document_date/models/account_move.py create mode 100644 account_analytic_document_date/models/account_move_line.py create mode 100644 account_analytic_document_date/readme/CONTRIBUTORS.md create mode 100644 account_analytic_document_date/readme/DESCRIPTION.md create mode 100644 account_analytic_document_date/readme/USAGE.md create mode 100644 account_analytic_document_date/static/description/icon.png create mode 100644 account_analytic_document_date/static/description/icon.svg create mode 100644 account_analytic_document_date/static/description/index.html create mode 100644 account_analytic_document_date/tests/__init__.py create mode 100644 account_analytic_document_date/tests/test_document_date.py create mode 100644 account_analytic_document_date/views/account_analytic_line_views.xml create mode 100644 account_analytic_document_date/views/account_bank_statement_line_views.xml create mode 100644 account_analytic_document_date/views/account_move.xml create mode 120000 setup/account_analytic_document_date/odoo/addons/account_analytic_document_date create mode 100644 setup/account_analytic_document_date/setup.py diff --git a/account_analytic_document_date.zip b/account_analytic_document_date.zip new file mode 100644 index 0000000000000000000000000000000000000000..f3e240b7c778f6d8b7caa962dc31058d4aea2abc GIT binary patch literal 63052 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 literal 0 HcmV?d00001 diff --git a/account_analytic_document_date/README.rst b/account_analytic_document_date/README.rst new file mode 100644 index 0000000000..f23ce03fc4 --- /dev/null +++ b/account_analytic_document_date/README.rst @@ -0,0 +1,109 @@ +============================== +Account Analytic Document Date +============================== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:a744d1489a8640283abcaacbc6366a24199f447d5d46ba66ad30beefcebf542b + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github + :target: https://github.com/OCA/account-analytic/tree/16.0/account_analytic_document_date + :alt: OCA/account-analytic +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/account-analytic-16-0/account-analytic-16-0-account_analytic_document_date + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png + :target: https://runboat.odoo-community.org/builds?repo=OCA/account-analytic&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module adds an other date to the account.move for analytics +proposits + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +1. **Set Document Date on Invoice:** + + - Navigate to the invoice and set the document date. + - If the document date is not set, it will automatically be assigned + the invoice date upon confirmation. + +2. **Analytic Line Generation:** + + - If any line has analytic information, the generated analytic entry + will inherit the document date. + +3. **Setting Document Date in Reconcile View:** + + - You can also set the document date from the reconciliation view, + but this option is available only during manual reconciliation. + +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 to smash it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +------- + +* (Nagarro - APSL) +* Miquel Pascual +* Bernat Obrador + +Contributors +------------ + +- ``APSL - Nagarro ``\ \_\_: + + - Miquel Pascual + - Bernat Obrador + +Maintainers +----------- + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +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. + +.. |maintainer-mpascual@apsl.net, bobrador@apsl.net| image:: https://github.com/mpascual@apsl.net, bobrador@apsl.net.png?size=40px + :target: https://github.com/mpascual@apsl.net, bobrador@apsl.net + :alt: mpascual@apsl.net, bobrador@apsl.net + +Current `maintainer `__: + +|maintainer-mpascual@apsl.net, bobrador@apsl.net| + +This module is part of the `OCA/account-analytic `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/account_analytic_document_date/__init__.py b/account_analytic_document_date/__init__.py new file mode 100644 index 0000000000..cc6b6354ad --- /dev/null +++ b/account_analytic_document_date/__init__.py @@ -0,0 +1,2 @@ +from . import models +from .hooks import post_init_hook diff --git a/account_analytic_document_date/__manifest__.py b/account_analytic_document_date/__manifest__.py new file mode 100644 index 0000000000..e642bd03f8 --- /dev/null +++ b/account_analytic_document_date/__manifest__.py @@ -0,0 +1,23 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Account Analytic Document Date", + "summary": "Account Analytic Document Date", + "version": "16.0.1.0.0", + "website": "https://github.com/OCA/account-analytic", + "author": ( + "(Nagarro - APSL), Miquel Pascual, Bernat Obrador," + "Odoo Community Association (OCA)" + ), + "maintainers": ["mpascual@apsl.net, bobrador@apsl.net"], + "license": "AGPL-3", + "application": False, + "installable": True, + "depends": ["account", "account_reconcile_oca"], + "data": [ + "views/account_analytic_line_views.xml", + "views/account_bank_statement_line_views.xml", + "views/account_move.xml", + ], + "post_init_hook": "post_init_hook", +} diff --git a/account_analytic_document_date/hooks.py b/account_analytic_document_date/hooks.py new file mode 100644 index 0000000000..e7551dec48 --- /dev/null +++ b/account_analytic_document_date/hooks.py @@ -0,0 +1,13 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import SUPERUSER_ID, api + + +def post_init_hook(cr, registry): + env = api.Environment(cr, SUPERUSER_ID, {}) + + moves = env["account.move"].search([]) + + for move in moves: + if not move.document_date: + move.write({"document_date": move.invoice_date}) diff --git a/account_analytic_document_date/i18n/ca_ES.po b/account_analytic_document_date/i18n/ca_ES.po new file mode 100644 index 0000000000..6ae2846662 --- /dev/null +++ b/account_analytic_document_date/i18n/ca_ES.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_analytic_document_date +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-27 10:33+0000\n" +"PO-Revision-Date: 2024-09-27 10:33+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line +msgid "Analytic Line" +msgstr "Línia analítica" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Línea d'extracte bancari" + +#. module: account_analytic_document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__document_date +msgid "Document Date" +msgstr "Data del Document" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_move +msgid "Journal Entry" +msgstr "Assentament comptable" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_move_line +msgid "Journal Item" +msgstr "Element del diari" diff --git a/account_analytic_document_date/i18n/es.po b/account_analytic_document_date/i18n/es.po new file mode 100644 index 0000000000..a4661a4df0 --- /dev/null +++ b/account_analytic_document_date/i18n/es.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * account_analytic_document_date +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-09-27 10:29+0000\n" +"PO-Revision-Date: 2024-09-27 10:29+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_analytic_line +msgid "Analytic Line" +msgstr "Línea analítica" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_bank_statement_line +msgid "Bank Statement Line" +msgstr "Línea de extracto bancario" + +#. module: account_analytic_document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_analytic_line__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_bank_statement_line__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_move__document_date +#: model:ir.model.fields,field_description:account_analytic_document_date.field_account_payment__document_date +msgid "Document Date" +msgstr "Fecha del Documento" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_move +msgid "Journal Entry" +msgstr "Asiento contable" + +#. module: account_analytic_document_date +#: model:ir.model,name:account_analytic_document_date.model_account_move_line +msgid "Journal Item" +msgstr "Apunte contable" diff --git a/account_analytic_document_date/models/__init__.py b/account_analytic_document_date/models/__init__.py new file mode 100644 index 0000000000..6c668354c1 --- /dev/null +++ b/account_analytic_document_date/models/__init__.py @@ -0,0 +1,4 @@ +from . import account_move_line +from . import account_analytic_line +from . import account_move +from . import account_bank_statement_line diff --git a/account_analytic_document_date/models/account_analytic_line.py b/account_analytic_document_date/models/account_analytic_line.py new file mode 100644 index 0000000000..41cac08ebf --- /dev/null +++ b/account_analytic_document_date/models/account_analytic_line.py @@ -0,0 +1,9 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class AccountAnalyticLine(models.Model): + _inherit = "account.analytic.line" + + document_date = fields.Date() diff --git a/account_analytic_document_date/models/account_bank_statement_line.py b/account_analytic_document_date/models/account_bank_statement_line.py new file mode 100644 index 0000000000..de501ef9a5 --- /dev/null +++ b/account_analytic_document_date/models/account_bank_statement_line.py @@ -0,0 +1,17 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class AccountBankStatementLine(models.Model): + _inherit = "account.bank.statement.line" + + document_date = fields.Date( + "Document Date", related="move_id.document_date", readonly=False + ) + + def reconcile_bank_line(self): + self.ensure_one() + res = super().reconcile_bank_line() + self.move_id.document_date = self.document_date + return res diff --git a/account_analytic_document_date/models/account_move.py b/account_analytic_document_date/models/account_move.py new file mode 100644 index 0000000000..9a14fd8e98 --- /dev/null +++ b/account_analytic_document_date/models/account_move.py @@ -0,0 +1,21 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import api, fields, models + + +class AccountMove(models.Model): + _inherit = "account.move" + + document_date = fields.Date() + + @api.onchange("invoice_date") + def _onchange_invoice_date(self): + for record in self: + if not record.document_date: + record.document_date = record.invoice_date + + def action_post(self): + res = super().action_post() + if not self.document_date: + self.document_date = self.invoice_date + return res diff --git a/account_analytic_document_date/models/account_move_line.py b/account_analytic_document_date/models/account_move_line.py new file mode 100644 index 0000000000..dbb5691009 --- /dev/null +++ b/account_analytic_document_date/models/account_move_line.py @@ -0,0 +1,16 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from odoo import models + + +class AccountMoveLine(models.Model): + _inherit = "account.move.line" + + def _prepare_analytic_lines(self): + vals = super()._prepare_analytic_lines() + for val in vals: + if self.move_id.document_date: + val.update({"document_date": self.move_id.document_date}) + else: + val.update({"document_date": self.move_id.invoice_date}) + return vals diff --git a/account_analytic_document_date/readme/CONTRIBUTORS.md b/account_analytic_document_date/readme/CONTRIBUTORS.md new file mode 100644 index 0000000000..470a586b45 --- /dev/null +++ b/account_analytic_document_date/readme/CONTRIBUTORS.md @@ -0,0 +1,4 @@ +- `APSL - Nagarro `__: + + - Miquel Pascual + - Bernat Obrador \ No newline at end of file diff --git a/account_analytic_document_date/readme/DESCRIPTION.md b/account_analytic_document_date/readme/DESCRIPTION.md new file mode 100644 index 0000000000..7ef9b2e066 --- /dev/null +++ b/account_analytic_document_date/readme/DESCRIPTION.md @@ -0,0 +1 @@ +This module adds an other date to the account.move for analytics proposits \ No newline at end of file diff --git a/account_analytic_document_date/readme/USAGE.md b/account_analytic_document_date/readme/USAGE.md new file mode 100644 index 0000000000..f6865426c2 --- /dev/null +++ b/account_analytic_document_date/readme/USAGE.md @@ -0,0 +1,9 @@ +1. **Set Document Date on Invoice:** + - Navigate to the invoice and set the document date. + - If the document date is not set, it will automatically be assigned the invoice date upon confirmation. + +2. **Analytic Line Generation:** + - If any line has analytic information, the generated analytic entry will inherit the document date. + +3. **Setting Document Date in Reconcile View:** + - You can also set the document date from the reconciliation view, but this option is available only during manual reconciliation. \ No newline at end of file diff --git a/account_analytic_document_date/static/description/icon.png b/account_analytic_document_date/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/account_analytic_document_date/static/description/icon.svg b/account_analytic_document_date/static/description/icon.svg new file mode 100644 index 0000000000..a7a26d0932 --- /dev/null +++ b/account_analytic_document_date/static/description/icon.svg @@ -0,0 +1,79 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/account_analytic_document_date/static/description/index.html b/account_analytic_document_date/static/description/index.html new file mode 100644 index 0000000000..ff05d616a5 --- /dev/null +++ b/account_analytic_document_date/static/description/index.html @@ -0,0 +1,454 @@ + + + + + +Account Analytic Document Date + + + +

+

Account Analytic Document Date

+ + +

Beta License: AGPL-3 OCA/account-analytic Translate me on Weblate Try me on Runboat

+

This module adds an other date to the account.move for analytics +proposits

+

Table of contents

+ +
+

Usage

+
    +
  1. Set Document Date on Invoice:
      +
    • Navigate to the invoice and set the document date.
    • +
    • If the document date is not set, it will automatically be assigned +the invoice date upon confirmation.
    • +
    +
  2. +
  3. Analytic Line Generation:
      +
    • If any line has analytic information, the generated analytic entry +will inherit the document date.
    • +
    +
  4. +
  5. Setting Document Date in Reconcile View:
      +
    • You can also set the document date from the reconciliation view, +but this option is available only during manual reconciliation.
    • +
    +
  6. +
+
+
+

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 to smash it by providing a detailed and welcomed +feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • (Nagarro - APSL)
  • +
  • Miquel Pascual
  • +
  • Bernat Obrador
  • +
+
+
+

Contributors

+
    +
  • APSL - Nagarro <https://apsl.tech>__:
      +
    • Miquel Pascual
    • +
    • Bernat Obrador
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+ +Odoo Community Association + +

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.

+

Current maintainer:

+

mpascual@apsl.net, bobrador@apsl.net

+

This module is part of the OCA/account-analytic project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/account_analytic_document_date/tests/__init__.py b/account_analytic_document_date/tests/__init__.py new file mode 100644 index 0000000000..9320b69a50 --- /dev/null +++ b/account_analytic_document_date/tests/__init__.py @@ -0,0 +1 @@ +from . import test_document_date diff --git a/account_analytic_document_date/tests/test_document_date.py b/account_analytic_document_date/tests/test_document_date.py new file mode 100644 index 0000000000..66aa3227c8 --- /dev/null +++ b/account_analytic_document_date/tests/test_document_date.py @@ -0,0 +1,101 @@ +# Copyright 2024 (APSL - Nagarro) Miquel Pascual, Bernat Obrador +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +from datetime import datetime, timedelta + +from odoo.tests import TransactionCase + + +class TestAccountMoveDocumentDate(TransactionCase): + @classmethod + def setUpClass(cls): + super(TestAccountMoveDocumentDate, cls).setUpClass() + cls.account_move_model = cls.env["account.move"] + + cls.partner = cls.env["res.partner"].create( + { + "name": "Test Partner", + "email": "test@partner.com", + "phone": "123456789", + } + ) + + cls.analytic_plan_1 = cls.env["account.analytic.plan"].create( + { + "name": "Plan 1", + "default_applicability": "unavailable", + "company_id": False, + } + ) + + cls.analytic_account_1 = cls.env["account.analytic.account"].create( + {"name": "Account 1", "plan_id": cls.analytic_plan_1.id} + ) + + def test_create_invoice_without_document_date(self): + invoice = self.account_move_model.create( + { + "move_type": "out_invoice", + "partner_id": self.partner.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "Test Product", + "quantity": 1, + "price_unit": 100.0, + "tax_ids": [ + (6, 0, [self.env["account.tax"].search([], limit=1).id]) + ], + "analytic_distribution": {self.analytic_account_1.id: 100}, + }, + ) + ], + } + ) + + invoice.action_post() + + self.assertEqual(invoice.document_date, invoice.invoice_date) + + # Confirms that the analytic line has the same document_date as the account.move + analytic_line = self.env["account.analytic.line"].search( + [("move_line_id", "in", invoice.line_ids.ids)], limit=1 + ) + self.assertEqual(invoice.document_date, analytic_line.document_date) + + def test_create_invoice_with_document_date(self): + document_date = datetime.now().date() + timedelta(days=1) + invoice = self.account_move_model.create( + { + "move_type": "out_invoice", + "partner_id": self.partner.id, + "invoice_line_ids": [ + ( + 0, + 0, + { + "name": "Test Product", + "quantity": 1, + "price_unit": 100.0, + "tax_ids": [ + (6, 0, [self.env["account.tax"].search([], limit=1).id]) + ], + "analytic_distribution": {self.analytic_account_1.id: 100}, + }, + ) + ], + "document_date": document_date, + } + ) + + invoice.action_post() + + self.assertEqual(invoice.document_date, document_date) + self.assertNotEqual(invoice.invoice_date, invoice.document_date) + + # Confirms that the analytic line has the same document_date as the account.move + analytic_line = self.env["account.analytic.line"].search( + [("move_line_id", "in", invoice.line_ids.ids)], limit=1 + ) + self.assertEqual(invoice.document_date, analytic_line.document_date) diff --git a/account_analytic_document_date/views/account_analytic_line_views.xml b/account_analytic_document_date/views/account_analytic_line_views.xml new file mode 100644 index 0000000000..0f5c7be6bd --- /dev/null +++ b/account_analytic_document_date/views/account_analytic_line_views.xml @@ -0,0 +1,45 @@ + + + + + account.analytic.line.tree + account.analytic.line + + + + + + + + + account.analytic.line.form + account.analytic.line + + + + + + + + + + Analytic Document Date Search + account.analytic.line + + + + + + + + + + + + + + diff --git a/account_analytic_document_date/views/account_bank_statement_line_views.xml b/account_analytic_document_date/views/account_bank_statement_line_views.xml new file mode 100644 index 0000000000..dbda42c7b1 --- /dev/null +++ b/account_analytic_document_date/views/account_bank_statement_line_views.xml @@ -0,0 +1,23 @@ + + + + + bank_statement_line_form_reconcile_view.inherit + account.bank.statement.line + + + + + + + + diff --git a/account_analytic_document_date/views/account_move.xml b/account_analytic_document_date/views/account_move.xml new file mode 100644 index 0000000000..512efec90a --- /dev/null +++ b/account_analytic_document_date/views/account_move.xml @@ -0,0 +1,19 @@ + + + + + account_move_view_form_inherit + account.move + + + + + + + + diff --git a/setup/account_analytic_document_date/odoo/addons/account_analytic_document_date b/setup/account_analytic_document_date/odoo/addons/account_analytic_document_date new file mode 120000 index 0000000000..ef642625e4 --- /dev/null +++ b/setup/account_analytic_document_date/odoo/addons/account_analytic_document_date @@ -0,0 +1 @@ +../../../../account_analytic_document_date \ No newline at end of file diff --git a/setup/account_analytic_document_date/setup.py b/setup/account_analytic_document_date/setup.py new file mode 100644 index 0000000000..28c57bb640 --- /dev/null +++ b/setup/account_analytic_document_date/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)