2
0

[MIG] account_netting: Migration to 15.0

TT36939
This commit is contained in:
Víctor Martínez 2022-10-11 13:54:03 +02:00 committed by Alexis de Lattre
parent e565f741bd
commit 1864bc402b
9 changed files with 108 additions and 233 deletions

View File

@ -14,13 +14,13 @@ Account netting
: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--financial--tools-lightgray.png?logo=github
:target: https://github.com/OCA/account-financial-tools/tree/14.0/account_netting
:target: https://github.com/OCA/account-financial-tools/tree/15.0/account_netting
:alt: OCA/account-financial-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/account-financial-tools-14-0/account-financial-tools-14-0-account_netting
:target: https://translation.odoo-community.org/projects/account-financial-tools-15-0/account-financial-tools-15-0-account_netting
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/92/14.0
:target: https://runbot.odoo-community.org/runbot/92/15.0
:alt: Try me on Runbot
|badge1| |badge2| |badge3| |badge4| |badge5|
@ -61,7 +61,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
`feedback <https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_netting%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
`feedback <https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_netting%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
@ -76,8 +76,11 @@ Authors
Contributors
~~~~~~~~~~~~
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Vicent Cubells <vicent.cubells@serviciosbaeza.com>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells
* Víctor Martínez
Maintainers
~~~~~~~~~~~
@ -92,6 +95,6 @@ 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.
This module is part of the `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools/tree/14.0/account_netting>`_ project on GitHub.
This module is part of the `OCA/account-financial-tools <https://github.com/OCA/account-financial-tools/tree/15.0/account_netting>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@ -4,7 +4,7 @@
{
"name": "Account netting",
"version": "14.0.1.0.0",
"version": "15.0.1.0.0",
"summary": "Compensate AR/AP accounts from the same partner",
"category": "Accounting & Finance",
"author": "Tecnativa, Odoo Community Association (OCA)",

View File

@ -162,9 +162,3 @@ msgstr ""
#, python-format
msgid "You should compensate at least 2 journal entries."
msgstr "Sie müssen mindestens 2 Journalposten kompensieren."
#~ msgid "Select the journal where storing the journal entries"
#~ msgstr "Wählen Sie das Journal zur Aufnahme der Posten"
#~ msgid "account.move.make.netting"
#~ msgstr "account.move.make.netting"

View File

@ -162,9 +162,3 @@ msgstr "Asistente para generar movimientos de compensación"
#, python-format
msgid "You should compensate at least 2 journal entries."
msgstr "Debe compensar al menos 2 apuntes."
#~ msgid "Select the journal where storing the journal entries"
#~ msgstr "Seleccione el diario en el que se guardarán los apuntes"
#~ msgid "account.move.make.netting"
#~ msgstr "cuenta.asiento.hacer.neteo"

View File

@ -162,9 +162,3 @@ msgstr "Assistente para gerar lançamentos de encontros de contas"
#, python-format
msgid "You should compensate at least 2 journal entries."
msgstr "Deve compensar pelos menos 2 itens de diário."
#~ msgid "Select the journal where storing the journal entries"
#~ msgstr "Selecione o Diário onde guardar os lançamentos"
#~ msgid "account.move.make.netting"
#~ msgstr "account.move.make.netting"

View File

@ -1,2 +1,5 @@
* Pedro M. Baeza <pedro.baeza@tecnativa.com>
* Vicent Cubells <vicent.cubells@serviciosbaeza.com>
* `Tecnativa <https://www.tecnativa.com>`_:
* Pedro M. Baeza
* Vicent Cubells
* Víctor Martínez

View File

@ -3,7 +3,7 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
<meta name="generator" content="Docutils: http://docutils.sourceforge.net/" />
<title>Account netting</title>
<style type="text/css">
@ -367,7 +367,7 @@ ul.auto-toc {
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/14.0/account_netting"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-financial-tools-14-0/account-financial-tools-14-0-account_netting"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/92/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p><a class="reference external" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/15.0/account_netting"><img alt="OCA/account-financial-tools" src="https://img.shields.io/badge/github-OCA%2Faccount--financial--tools-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/account-financial-tools-15-0/account-financial-tools-15-0-account_netting"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/92/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
<p>This module allows to compensate the balance of a receivable account with the
balance of a payable account for the same partner, creating a journal item
that reflects this operation.</p>
@ -407,7 +407,7 @@ counterparts of the AR/AP operations.</p>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues">GitHub Issues</a>.
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
<a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_netting%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/new?body=module:%20account_netting%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
@ -421,8 +421,12 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
<ul class="simple">
<li>Pedro M. Baeza &lt;<a class="reference external" href="mailto:pedro.baeza&#64;tecnativa.com">pedro.baeza&#64;tecnativa.com</a>&gt;</li>
<li>Vicent Cubells &lt;<a class="reference external" href="mailto:vicent.cubells&#64;serviciosbaeza.com">vicent.cubells&#64;serviciosbaeza.com</a>&gt;</li>
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
<li>Pedro M. Baeza</li>
<li>Vicent Cubells</li>
<li>Víctor Martínez</li>
</ul>
</li>
</ul>
</div>
<div class="section" id="maintainers">
@ -432,7 +436,7 @@ If you spotted it first, help us smashing it by providing a detailed and welcome
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/14.0/account_netting">OCA/account-financial-tools</a> project on GitHub.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/account-financial-tools/tree/15.0/account_netting">OCA/account-financial-tools</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>

View File

@ -1,235 +1,116 @@
# Copyright 2015 Pedro M. Baeza
# Copyright 2017 Tecnativa - Vicent Cubells
# Copyright 2022 Tecnativa - Víctor Martínez
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from datetime import datetime
import odoo.tests.common as common
from odoo.exceptions import ValidationError
from odoo.tests import Form, tagged
class TestAccountNetting(common.SavepointCase):
@tagged("post_install")
class TestAccountNetting(common.TransactionCase):
@classmethod
def setUpClass(cls):
super(TestAccountNetting, cls).setUpClass()
super().setUpClass()
res_users_account_manager = cls.env.ref("account.group_account_manager")
partner_manager = cls.env.ref("base.group_partner_manager")
cls.env.user.write(
{"groups_id": [(6, 0, [res_users_account_manager.id, partner_manager.id])]}
)
company = cls.env.ref("base.main_company")
cls.company = cls.env.ref("base.main_company")
# only adviser can create an account
cls.account_receivable = cls.env["account.account"].create(
cls.aa_model = cls.env["account.account"]
cls.account_receivable = cls._get_account(cls, "receivable")
cls.account_payable = cls._get_account(cls, "payable")
cls.account_revenue = cls._get_account(cls, "revenue")
cls.account_expense = cls._get_account(cls, "expenses")
cls.partner_model = cls.env["res.partner"]
cls.partner = cls._create_partner(cls, "Supplier/Customer")
cls.partner1 = cls._create_partner(cls, "Supplier/Customer 1")
cls.miscellaneous_journal = cls.env["account.journal"].search(
[("type", "=", "general")], limit=1
)
# We need a product with taxes at 0 so that the amounts are as expected.
cls.account_tax = cls.env["account.tax"].create(
{"name": "0%", "amount_type": "fixed", "type_tax_use": "sale", "amount": 0}
)
cls.product = cls.env["product.product"].create(
{
"code": "cust_acc",
"name": "customer account",
"user_type_id": cls.env.ref("account.data_account_type_receivable").id,
"reconcile": True,
"company_id": company.id,
"name": "Product Test",
"list_price": 10,
"taxes_id": [(6, 0, [cls.account_tax.id])],
}
)
cls.account_payable = cls.env["account.account"].create(
{
"code": "supp_acc",
"name": "supplier account",
"user_type_id": cls.env.ref("account.data_account_type_payable").id,
"reconcile": True,
"company_id": company.id,
}
)
cls.account_revenue = cls.env["account.account"].search(
[
(
"user_type_id",
"=",
cls.env.ref("account.data_account_type_revenue").id,
),
("company_id", "=", company.id),
],
limit=1,
)
cls.account_expense = cls.env["account.account"].search(
[
(
"user_type_id",
"=",
cls.env.ref("account.data_account_type_expenses").id,
),
("company_id", "=", company.id),
],
limit=1,
)
cls.partner = cls.env["res.partner"].create(
{
"name": "Supplier/Customer",
"property_account_receivable_id": cls.account_receivable.id,
"property_account_payable_id": cls.account_payable.id,
}
)
cls.partner1 = cls.env["res.partner"].create(
{
"name": "Supplier/Customer 1",
"property_account_receivable_id": cls.account_receivable.id,
"property_account_payable_id": cls.account_payable.id,
}
)
cls.journal = cls.env["account.journal"].create(
{
"name": "Test sale journal",
"type": "sale",
"code": "TEST",
"company_id": company.id,
}
)
cls.expenses_journal = cls.env["account.journal"].create(
{
"name": "Test expense journal",
"type": "purchase",
"code": "EXP",
"company_id": company.id,
}
)
cls.miscellaneous_journal = cls.env["account.journal"].create(
{
"name": "Miscellaneus journal",
"type": "general",
"code": "OTHER",
"company_id": company.id,
}
)
cls.customer_invoice = cls.env["account.move"].create(
{
"journal_id": cls.journal.id,
"move_type": "out_invoice",
"partner_id": cls.partner.id,
"company_id": company.id,
"invoice_line_ids": [
(
0,
0,
{
"name": "Test",
"price_unit": 100.0,
"account_id": cls.account_revenue.id,
},
)
],
}
)
cls.customer_invoice.action_post()
customer_move = cls.customer_invoice
cls.move_line_1 = customer_move.line_ids.filtered(
out_invoice_partner = cls._create_move(cls, "out_invoice", cls.partner, 100)
out_invoice_partner.action_post()
cls.move_line_1 = out_invoice_partner.line_ids.filtered(
lambda x: x.account_id == cls.account_receivable
)
cls.supplier_invoice = cls.env["account.move"].create(
{
"journal_id": cls.expenses_journal.id,
"move_type": "in_invoice",
"partner_id": cls.partner.id,
"company_id": company.id,
"invoice_date": datetime.now(),
"invoice_line_ids": [
(
0,
0,
{
"name": "Test",
"price_unit": 1200.0,
"account_id": cls.account_expense.id,
},
)
],
}
)
cls.supplier_invoice.action_post()
supplier_move = cls.supplier_invoice
cls.move_line_2 = supplier_move.line_ids.filtered(
in_invoice_partner = cls._create_move(cls, "in_invoice", cls.partner, 1200)
in_invoice_partner.action_post()
cls.move_line_2 = in_invoice_partner.line_ids.filtered(
lambda x: x.account_id == cls.account_payable
)
cls.move_line_3 = supplier_move.line_ids.filtered(
cls.move_line_3 = in_invoice_partner.line_ids.filtered(
lambda x: x.account_id == cls.account_expense
)
cls.supplier_invoice = cls.env["account.move"].create(
{
"journal_id": cls.expenses_journal.id,
"move_type": "in_invoice",
"partner_id": cls.partner1.id,
"company_id": company.id,
"invoice_date": datetime.now(),
"invoice_line_ids": [
(
0,
0,
{
"name": "Test",
"price_unit": 200.0,
"account_id": cls.account_expense.id,
},
)
],
}
)
cls.supplier_invoice.action_post()
supplier_move = cls.supplier_invoice
cls.move_line_4 = supplier_move.line_ids.filtered(
in_invoice_partner1 = cls._create_move(cls, "in_invoice", cls.partner1, 200)
in_invoice_partner1.action_post()
cls.move_line_4 = in_invoice_partner1.line_ids.filtered(
lambda x: x.account_id == cls.account_payable
)
cls.supplier_invoice = cls.env["account.move"].create(
{
"journal_id": cls.expenses_journal.id,
"move_type": "in_refund",
"partner_id": cls.partner1.id,
"company_id": company.id,
"invoice_date": datetime.now(),
"invoice_line_ids": [
(
0,
0,
{
"name": "Test",
"price_unit": 200.0,
"account_id": cls.account_expense.id,
},
)
],
}
)
cls.supplier_invoice.action_post()
supplier_move = cls.supplier_invoice
cls.move_line_5 = supplier_move.line_ids.filtered(
in_refund_partner1 = cls._create_move(cls, "in_refund", cls.partner1, 200)
in_refund_partner1.action_post()
cls.move_line_5 = in_refund_partner1.line_ids.filtered(
lambda x: x.account_id == cls.account_payable
)
cls.supplier_invoice = cls.env["account.move"].create(
{
"journal_id": cls.expenses_journal.id,
"move_type": "in_refund",
"partner_id": cls.partner1.id,
"company_id": company.id,
"invoice_date": datetime.now(),
"invoice_line_ids": [
(
0,
0,
{
"name": "Test",
"price_unit": 200.0,
"account_id": cls.account_expense.id,
},
)
],
}
)
cls.supplier_invoice.action_post()
supplier_move = cls.supplier_invoice
cls.move_line_6 = supplier_move.line_ids.filtered(
in_refund_partner1 = cls._create_move(cls, "in_refund", cls.partner1, 200)
in_refund_partner1.action_post()
cls.move_line_6 = in_refund_partner1.line_ids.filtered(
lambda x: x.account_id == cls.account_payable
)
def _get_account(self, user_type):
user_type_ref = "account.data_account_type_%s" % user_type
return self.aa_model.search(
[
("user_type_id", "=", self.env.ref(user_type_ref).id),
("company_id", "=", self.company.id),
],
limit=1,
)
def _create_partner(self, name):
return self.partner_model.create(
{
"name": name,
"property_account_receivable_id": self.account_receivable.id,
"property_account_payable_id": self.account_payable.id,
}
)
def _create_move(self, move_type, partner, price):
move_form = Form(
self.env["account.move"].with_context(
default_move_type=move_type,
)
)
move_form.partner_id = partner
move_form.invoice_date = datetime.now()
with move_form.invoice_line_ids.new() as line_form:
line_form.product_id = self.product
line_form.price_unit = price
return move_form.save()
def test_compensation(self):
# Test exception line 33 from account_move_make_netting
obj = self.env["account.move.make.netting"].with_context(
active_ids=[self.move_line_1.id]
)
with self.assertRaises(Exception):
with self.assertRaises(ValidationError):
wizard = obj.create(
{
"move_line_ids": [(6, 0, [self.move_line_1.id])],
@ -240,7 +121,7 @@ class TestAccountNetting(common.SavepointCase):
obj = self.env["account.move.make.netting"].with_context(
active_ids=[self.move_line_1.id, self.move_line_3.id]
)
with self.assertRaises(Exception):
with self.assertRaises(ValidationError):
wizard = obj.create(
{
"move_line_ids": [
@ -253,7 +134,7 @@ class TestAccountNetting(common.SavepointCase):
obj = self.env["account.move.make.netting"].with_context(
active_ids=[self.move_line_4.id, self.move_line_5.id]
)
with self.assertRaises(Exception):
with self.assertRaises(ValidationError):
wizard = obj.create(
{
"move_line_ids": [
@ -270,7 +151,7 @@ class TestAccountNetting(common.SavepointCase):
obj = self.env["account.move.make.netting"].with_context(
active_ids=[self.move_line_4.id, self.move_line_5.id]
)
with self.assertRaises(Exception):
with self.assertRaises(ValidationError):
wizard = obj.create(
{
"move_line_ids": [
@ -283,7 +164,7 @@ class TestAccountNetting(common.SavepointCase):
obj = self.env["account.move.make.netting"].with_context(
active_ids=[self.move_line_1.id, self.move_line_6.id]
)
with self.assertRaises(Exception):
with self.assertRaises(ValidationError):
wizard = obj.create(
{
"move_line_ids": [

View File

@ -125,7 +125,9 @@ class AccountMoveMakeNetting(models.TransientModel):
)
to_reconcile.reconcile()
# Open created move
action = self.env.ref("account.action_move_journal_line").read()[0]
action = self.env["ir.actions.act_window"]._for_xml_id(
"account.action_move_journal_line"
)
action["view_mode"] = "form"
del action["views"]
del action["view_id"]