170 lines
6.1 KiB
Python
Executable File
170 lines
6.1 KiB
Python
Executable File
from odoo import fields
|
|
from odoo.tests import tagged
|
|
|
|
from odoo.addons.account.tests.common import AccountTestInvoicingCommon
|
|
from odoo.addons.auditlog.tests.common import AuditLogRuleCommon
|
|
|
|
|
|
@tagged("post_install", "-at_install")
|
|
class TestAccountMoveReverse(AccountTestInvoicingCommon, AuditLogRuleCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
# Class setup taken from account/tests/test_account_move_in_invoice.py
|
|
super().setUpClass()
|
|
|
|
cls.other_currency = cls.setup_other_currency("EUR")
|
|
|
|
cls.invoice = cls.init_invoice(
|
|
"in_invoice", products=cls.product_a + cls.product_b
|
|
)
|
|
|
|
cls.product_line_vals_1 = {
|
|
"name": "product_a",
|
|
"product_id": cls.product_a.id,
|
|
"account_id": cls.product_a.property_account_expense_id.id,
|
|
"partner_id": cls.partner_a.id,
|
|
"product_uom_id": cls.product_a.uom_id.id,
|
|
"quantity": 1.0,
|
|
"discount": 0.0,
|
|
"price_unit": 800.0,
|
|
"price_subtotal": 800.0,
|
|
"price_total": 920.0,
|
|
"tax_ids": cls.product_a.supplier_taxes_id.ids,
|
|
"tax_line_id": False,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"amount_currency": 800.0,
|
|
"debit": 800.0,
|
|
"credit": 0.0,
|
|
"date_maturity": False,
|
|
}
|
|
cls.product_line_vals_2 = {
|
|
"name": "product_b",
|
|
"product_id": cls.product_b.id,
|
|
"account_id": cls.product_b.property_account_expense_id.id,
|
|
"partner_id": cls.partner_a.id,
|
|
"product_uom_id": cls.product_b.uom_id.id,
|
|
"quantity": 1.0,
|
|
"discount": 0.0,
|
|
"price_unit": 160.0,
|
|
"price_subtotal": 160.0,
|
|
"price_total": 208.0,
|
|
"tax_ids": cls.product_b.supplier_taxes_id.ids,
|
|
"tax_line_id": False,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"amount_currency": 160.0,
|
|
"debit": 160.0,
|
|
"credit": 0.0,
|
|
"date_maturity": False,
|
|
}
|
|
cls.tax_line_vals_1 = {
|
|
"name": cls.tax_purchase_a.name,
|
|
"product_id": False,
|
|
"account_id": cls.company_data["default_account_tax_purchase"].id,
|
|
"partner_id": cls.partner_a.id,
|
|
"product_uom_id": False,
|
|
"quantity": False,
|
|
"discount": 0.0,
|
|
"price_unit": 0.0,
|
|
"price_subtotal": 0.0,
|
|
"price_total": 0.0,
|
|
"tax_ids": [],
|
|
"tax_line_id": cls.tax_purchase_a.id,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"amount_currency": 144.0,
|
|
"debit": 144.0,
|
|
"credit": 0.0,
|
|
"date_maturity": False,
|
|
}
|
|
cls.tax_line_vals_2 = {
|
|
"name": cls.tax_purchase_b.name,
|
|
"product_id": False,
|
|
"account_id": cls.company_data["default_account_tax_purchase"].id,
|
|
"partner_id": cls.partner_a.id,
|
|
"product_uom_id": False,
|
|
"quantity": False,
|
|
"discount": 0.0,
|
|
"price_unit": 0.0,
|
|
"price_subtotal": 0.0,
|
|
"price_total": 0.0,
|
|
"tax_ids": [],
|
|
"tax_line_id": cls.tax_purchase_b.id,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"amount_currency": 24.0,
|
|
"debit": 24.0,
|
|
"credit": 0.0,
|
|
"date_maturity": False,
|
|
}
|
|
cls.term_line_vals_1 = {
|
|
"name": False,
|
|
"product_id": False,
|
|
"account_id": cls.company_data["default_account_payable"].id,
|
|
"partner_id": cls.partner_a.id,
|
|
"product_uom_id": False,
|
|
"quantity": False,
|
|
"discount": 0.0,
|
|
"price_unit": 0.0,
|
|
"price_subtotal": 0.0,
|
|
"price_total": 0.0,
|
|
"tax_ids": [],
|
|
"tax_line_id": False,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"amount_currency": -1128.0,
|
|
"debit": 0.0,
|
|
"credit": 1128.0,
|
|
"date_maturity": fields.Date.from_string("2019-01-01"),
|
|
}
|
|
cls.move_vals = {
|
|
"partner_id": cls.partner_a.id,
|
|
"currency_id": cls.company_data["currency"].id,
|
|
"journal_id": cls.company_data["default_journal_purchase"].id,
|
|
"date": fields.Date.from_string("2019-01-01"),
|
|
"fiscal_position_id": False,
|
|
"payment_reference": False,
|
|
"invoice_payment_term_id": cls.pay_terms_a.id,
|
|
"amount_untaxed": 960.0,
|
|
"amount_tax": 168.0,
|
|
"amount_total": 1128.0,
|
|
}
|
|
cls.env.user.groups_id += cls.env.ref("uom.group_uom")
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
rules = self.env["auditlog.rule"].search([])
|
|
rules.unsubscribe()
|
|
rules.unlink()
|
|
self.rule = self.env["auditlog.rule"].create(
|
|
{
|
|
"name": __name__,
|
|
"model_id": self.env.ref("account.model_account_move_line").id,
|
|
"log_read": True,
|
|
"log_create": True,
|
|
"log_write": True,
|
|
"log_unlink": True,
|
|
"log_type": "full",
|
|
}
|
|
)
|
|
self.rule.subscribe()
|
|
|
|
def test_in_invoice_create_refund(self):
|
|
"""Test creating a refund from a vendor bill.
|
|
|
|
If auditlog does not carefully separate the main transaction cache from
|
|
the cache that it uses to fetch the logged values, this test would fail
|
|
on the loss of values related to the dynamic syncing of invoice and
|
|
journal entry lines.
|
|
"""
|
|
self.invoice.action_post()
|
|
|
|
move_reversal = (
|
|
self.env["account.move.reversal"]
|
|
.with_context(active_model="account.move", active_ids=self.invoice.ids)
|
|
.create(
|
|
{
|
|
"date": fields.Date.from_string("2019-02-01"),
|
|
"reason": "no reason",
|
|
"journal_id": self.invoice.journal_id.id,
|
|
}
|
|
)
|
|
)
|
|
move_reversal.refund_moves()
|