[14.0][MIG] account_spread_cost_revenue
This commit is contained in:
parent
01a2998bf2
commit
163eb46e4f
@ -4,7 +4,7 @@
|
|||||||
{
|
{
|
||||||
"name": "Cost-Revenue Spread",
|
"name": "Cost-Revenue Spread",
|
||||||
"summary": "Spread costs and revenues over a custom period",
|
"summary": "Spread costs and revenues over a custom period",
|
||||||
"version": "13.0.1.0.0",
|
"version": "14.0.1.0.0",
|
||||||
"development_status": "Beta",
|
"development_status": "Beta",
|
||||||
"author": "Onestein,Odoo Community Association (OCA)",
|
"author": "Onestein,Odoo Community Association (OCA)",
|
||||||
"maintainers": ["astirpe"],
|
"maintainers": ["astirpe"],
|
||||||
|
@ -1,26 +0,0 @@
|
|||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo import SUPERUSER_ID, api
|
|
||||||
|
|
||||||
|
|
||||||
def migrate(cr, version):
|
|
||||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
|
||||||
rule_name = "account_spread_cost_revenue.account_spread_multi_company_rule"
|
|
||||||
rule = env.ref(rule_name, raise_if_not_found=False)
|
|
||||||
if rule:
|
|
||||||
domain = "['|',('company_id','=',False),('company_id','in',company_ids)]"
|
|
||||||
rule.write({"domain_force": domain})
|
|
||||||
|
|
||||||
rule_name = "account_spread_cost_revenue.account_spread_template_multi_company_rule"
|
|
||||||
rule = env.ref(rule_name, raise_if_not_found=False)
|
|
||||||
if rule:
|
|
||||||
domain = "['|',('company_id','=',False),('company_id','in',company_ids)]"
|
|
||||||
rule.write({"domain_force": domain})
|
|
||||||
|
|
||||||
rule_name = (
|
|
||||||
"account_spread_cost_revenue.account_spread_template_auto_multi_company_rule"
|
|
||||||
)
|
|
||||||
rule = env.ref(rule_name, raise_if_not_found=False)
|
|
||||||
if rule:
|
|
||||||
domain = "['|',('company_id','=',False),('company_id','in',company_ids)]"
|
|
||||||
rule.write({"domain_force": domain})
|
|
@ -1,7 +0,0 @@
|
|||||||
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
from odoo.tools import sql
|
|
||||||
|
|
||||||
|
|
||||||
def migrate(cr, version):
|
|
||||||
sql.rename_column(cr, "res_partner", "auto_archive", "auto_archive_spread")
|
|
@ -13,6 +13,11 @@ class AccountMove(models.Model):
|
|||||||
res = super().action_post()
|
res = super().action_post()
|
||||||
spreads = self.mapped("invoice_line_ids.spread_id")
|
spreads = self.mapped("invoice_line_ids.spread_id")
|
||||||
spreads.compute_spread_board()
|
spreads.compute_spread_board()
|
||||||
|
# On posting of spread moves. Find their related spreads to creconcile
|
||||||
|
move_spreads = self.env["account.spread"].search(
|
||||||
|
[("line_ids.move_id", "in", self.ids)]
|
||||||
|
)
|
||||||
|
spreads += move_spreads
|
||||||
spreads.reconcile_spread_moves()
|
spreads.reconcile_spread_moves()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
@ -68,7 +68,7 @@ class AccountMoveLine(models.Model):
|
|||||||
for line in self:
|
for line in self:
|
||||||
if not line.spread_id:
|
if not line.spread_id:
|
||||||
pass
|
pass
|
||||||
elif line.move_id.type in ("out_invoice", "in_refund"):
|
elif line.move_id.move_type in ("out_invoice", "in_refund"):
|
||||||
if line.account_id != line.spread_id.debit_account_id:
|
if line.account_id != line.spread_id.debit_account_id:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_(
|
_(
|
||||||
@ -76,7 +76,7 @@ class AccountMoveLine(models.Model):
|
|||||||
"to the Balance Sheet (debit account) of the spread"
|
"to the Balance Sheet (debit account) of the spread"
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif line.move_id.type in ("in_invoice", "out_refund"):
|
elif line.move_id.move_type in ("in_invoice", "out_refund"):
|
||||||
if line.account_id != line.spread_id.credit_account_id:
|
if line.account_id != line.spread_id.credit_account_id:
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_(
|
_(
|
||||||
@ -110,10 +110,10 @@ class AccountMoveLine(models.Model):
|
|||||||
raise ValidationError(msg)
|
raise ValidationError(msg)
|
||||||
|
|
||||||
def create_auto_spread(self):
|
def create_auto_spread(self):
|
||||||
""" Create auto spread table for each invoice line, when needed """
|
"""Create auto spread table for each invoice line, when needed"""
|
||||||
|
|
||||||
def _filter_line(aline, iline):
|
def _filter_line(aline, iline):
|
||||||
""" Find matching template auto line with invoice line """
|
"""Find matching template auto line with invoice line"""
|
||||||
if aline.product_id and iline.product_id != aline.product_id:
|
if aline.product_id and iline.product_id != aline.product_id:
|
||||||
return False
|
return False
|
||||||
if aline.account_id and iline.account_id != aline.account_id:
|
if aline.account_id and iline.account_id != aline.account_id:
|
||||||
@ -130,7 +130,7 @@ class AccountMoveLine(models.Model):
|
|||||||
continue
|
continue
|
||||||
spread_type = (
|
spread_type = (
|
||||||
"sale"
|
"sale"
|
||||||
if line.move_id.type in ["out_invoice", "out_refund"]
|
if line.move_id.move_type in ["out_invoice", "out_refund"]
|
||||||
else "purchase"
|
else "purchase"
|
||||||
)
|
)
|
||||||
spread_auto = self.env["account.spread.template.auto"].search(
|
spread_auto = self.env["account.spread.template.auto"].search(
|
||||||
|
@ -273,7 +273,7 @@ class AccountSpread(models.Model):
|
|||||||
@api.constrains("invoice_id", "invoice_type")
|
@api.constrains("invoice_id", "invoice_type")
|
||||||
def _check_invoice_type(self):
|
def _check_invoice_type(self):
|
||||||
if self.filtered(
|
if self.filtered(
|
||||||
lambda s: s.invoice_id and s.invoice_type != s.invoice_id.type
|
lambda s: s.invoice_id and s.invoice_type != s.invoice_id.move_type
|
||||||
):
|
):
|
||||||
raise ValidationError(
|
raise ValidationError(
|
||||||
_("The Invoice Type does not correspond to the Invoice")
|
_("The Invoice Type does not correspond to the Invoice")
|
||||||
@ -498,6 +498,8 @@ class AccountSpread(models.Model):
|
|||||||
if mls_to_reconcile:
|
if mls_to_reconcile:
|
||||||
do_reconcile = mls_to_reconcile + self.invoice_line_id
|
do_reconcile = mls_to_reconcile + self.invoice_line_id
|
||||||
do_reconcile.remove_move_reconcile()
|
do_reconcile.remove_move_reconcile()
|
||||||
|
# ensure to reconcile only posted items
|
||||||
|
do_reconcile = do_reconcile.filtered(lambda l: l.move_id.state == "posted")
|
||||||
do_reconcile._check_spread_reconcile_validity()
|
do_reconcile._check_spread_reconcile_validity()
|
||||||
do_reconcile.reconcile()
|
do_reconcile.reconcile()
|
||||||
|
|
||||||
@ -507,11 +509,12 @@ class AccountSpread(models.Model):
|
|||||||
|
|
||||||
def _post_spread_moves(self, moves):
|
def _post_spread_moves(self, moves):
|
||||||
self.ensure_one()
|
self.ensure_one()
|
||||||
|
moves = moves.filtered(lambda l: l.state != "posted")
|
||||||
if not moves:
|
if not moves:
|
||||||
return
|
return
|
||||||
ctx = dict(self.env.context, skip_unique_sequence_number=True)
|
ctx = dict(self.env.context, skip_unique_sequence_number=True)
|
||||||
if self.company_id.force_move_auto_post or self.move_line_auto_post:
|
if self.company_id.force_move_auto_post or self.move_line_auto_post:
|
||||||
moves.with_context(ctx).post()
|
moves.with_context(ctx).action_post()
|
||||||
|
|
||||||
@api.depends("debit_account_id.deprecated", "credit_account_id.deprecated")
|
@api.depends("debit_account_id.deprecated", "credit_account_id.deprecated")
|
||||||
def _compute_deprecated_accounts(self):
|
def _compute_deprecated_accounts(self):
|
||||||
|
@ -35,8 +35,6 @@ class AccountInvoiceSpreadLine(models.Model):
|
|||||||
for move in created_moves
|
for move in created_moves
|
||||||
)
|
)
|
||||||
spread.message_post(body=post_msg)
|
spread.message_post(body=post_msg)
|
||||||
if spread.invoice_id.state == "posted":
|
|
||||||
spread._reconcile_spread_moves(created_moves)
|
|
||||||
spread._post_spread_moves(created_moves)
|
spread._post_spread_moves(created_moves)
|
||||||
|
|
||||||
def create_move(self):
|
def create_move(self):
|
||||||
@ -120,9 +118,10 @@ class AccountInvoiceSpreadLine(models.Model):
|
|||||||
]
|
]
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"name": self.name or "/",
|
"name": False,
|
||||||
"ref": self.name,
|
"ref": self.name,
|
||||||
"date": spread_date,
|
"date": spread_date,
|
||||||
|
"invoice_date": spread_date,
|
||||||
"journal_id": spread.journal_id.id,
|
"journal_id": spread.journal_id.id,
|
||||||
"line_ids": line_ids,
|
"line_ids": line_ids,
|
||||||
"company_id": spread.company_id.id,
|
"company_id": spread.company_id.id,
|
||||||
@ -168,7 +167,9 @@ class AccountInvoiceSpreadLine(models.Model):
|
|||||||
.mapped("move_id")
|
.mapped("move_id")
|
||||||
.filtered(lambda m: m.state != "posted")
|
.filtered(lambda m: m.state != "posted")
|
||||||
)
|
)
|
||||||
unposted_moves.filtered(lambda m: m.company_id.force_move_auto_post).post()
|
unposted_moves.filtered(
|
||||||
|
lambda m: m.company_id.force_move_auto_post
|
||||||
|
).action_post()
|
||||||
|
|
||||||
spreads_to_archive = (
|
spreads_to_archive = (
|
||||||
self.env["account.spread"]
|
self.env["account.spread"]
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
access_account_spread_cost_revenue_full,Full access on account.spread,model_account_spread,account.group_account_manager,1,1,1,1
|
access_account_spread_cost_revenue_full,Full access on account.spread,model_account_spread,account.group_account_manager,1,1,1,1
|
||||||
access_account_spread_cost_revenue_read,Read access on account.spread,model_account_spread,account.group_account_user,1,0,0,0
|
access_account_spread_cost_revenue_read,Read access on account.spread,model_account_spread,account.group_account_invoice,1,0,0,0
|
||||||
access_account_spread_cost_revenue_line_full,Full access on account.spread.line,model_account_spread_line,account.group_account_manager,1,1,1,1
|
access_account_spread_cost_revenue_line_full,Full access on account.spread.line,model_account_spread_line,account.group_account_manager,1,1,1,1
|
||||||
access_account_spread_cost_revenue_line_read,Read access on account.spread.line,model_account_spread_line,account.group_account_user,1,0,0,0
|
access_account_spread_cost_revenue_line_read,Read access on account.spread.line,model_account_spread_line,account.group_account_invoice,1,0,0,0
|
||||||
access_account_spread_cost_revenue_template_full,Full access on account.spread.template,model_account_spread_template,account.group_account_manager,1,1,1,1
|
access_account_spread_cost_revenue_template_full,Full access on account.spread.template,model_account_spread_template,account.group_account_manager,1,1,1,1
|
||||||
access_account_spread_cost_revenue_template_read,Read access on account.spread.template,model_account_spread_template,account.group_account_user,1,0,0,0
|
access_account_spread_cost_revenue_template_read,Read access on account.spread.template,model_account_spread_template,account.group_account_invoice,1,0,0,0
|
||||||
access_account_spread_cost_revenue_template_auto_full,Full access on account.spread.template.auto,model_account_spread_template_auto,account.group_account_manager,1,1,1,1
|
access_account_spread_cost_revenue_template_auto_full,Full access on account.spread.template.auto,model_account_spread_template_auto,account.group_account_manager,1,1,1,1
|
||||||
access_account_spread_cost_revenue_template_auto_read,Read access on account.spread.template.auto,model_account_spread_template_auto,account.group_account_user,1,0,0,0
|
access_account_spread_cost_revenue_template_auto_read,Read access on account.spread.template.auto,model_account_spread_template_auto,account.group_account_invoice,1,0,0,0
|
||||||
|
access_account_spread_invoice_line_link_wizard,access_account_spread_invoice_line_link_wizard,model_account_spread_invoice_line_link_wizard,base.group_user,1,1,1,1
|
||||||
|
|
@ -3,9 +3,7 @@
|
|||||||
|
|
||||||
from odoo.exceptions import UserError
|
from odoo.exceptions import UserError
|
||||||
|
|
||||||
from odoo.addons.account_spread_cost_revenue.tests.test_account_invoice_spread import (
|
from .test_account_invoice_spread import TestAccountInvoiceSpread
|
||||||
TestAccountInvoiceSpread,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
||||||
@ -18,9 +16,7 @@ class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
|||||||
"period_number": 5,
|
"period_number": 5,
|
||||||
"period_type": "month",
|
"period_type": "month",
|
||||||
"spread_account_id": self.account_payable.id,
|
"spread_account_id": self.account_payable.id,
|
||||||
"spread_journal_id": self.ref(
|
"spread_journal_id": self.expenses_journal.id,
|
||||||
"account_spread_cost_revenue.expenses_journal"
|
|
||||||
),
|
|
||||||
"auto_spread": False, # Auto Spread = False
|
"auto_spread": False, # Auto Spread = False
|
||||||
"auto_spread_ids": [
|
"auto_spread_ids": [
|
||||||
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
||||||
@ -41,9 +37,7 @@ class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
|||||||
"period_number": 5,
|
"period_number": 5,
|
||||||
"period_type": "month",
|
"period_type": "month",
|
||||||
"spread_account_id": self.account_payable.id,
|
"spread_account_id": self.account_payable.id,
|
||||||
"spread_journal_id": self.ref(
|
"spread_journal_id": self.expenses_journal.id,
|
||||||
"account_spread_cost_revenue.expenses_journal"
|
|
||||||
),
|
|
||||||
"auto_spread": True, # Auto Spread
|
"auto_spread": True, # Auto Spread
|
||||||
"auto_spread_ids": [
|
"auto_spread_ids": [
|
||||||
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
||||||
@ -57,9 +51,7 @@ class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
|||||||
"period_number": 5,
|
"period_number": 5,
|
||||||
"period_type": "month",
|
"period_type": "month",
|
||||||
"spread_account_id": self.account_payable.id,
|
"spread_account_id": self.account_payable.id,
|
||||||
"spread_journal_id": self.ref(
|
"spread_journal_id": self.expenses_journal.id,
|
||||||
"account_spread_cost_revenue.expenses_journal"
|
|
||||||
),
|
|
||||||
"auto_spread": True, # Auto Spread
|
"auto_spread": True, # Auto Spread
|
||||||
"auto_spread_ids": [
|
"auto_spread_ids": [
|
||||||
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
(0, 0, {"account_id": self.vendor_bill_line.account_id.id})
|
||||||
@ -92,9 +84,7 @@ class TestAccountInvoiceAutoSpread(TestAccountInvoiceSpread):
|
|||||||
"period_number": 5,
|
"period_number": 5,
|
||||||
"period_type": "month",
|
"period_type": "month",
|
||||||
"spread_account_id": self.account_receivable.id,
|
"spread_account_id": self.account_receivable.id,
|
||||||
"spread_journal_id": self.ref(
|
"spread_journal_id": self.sales_journal.id,
|
||||||
"account_spread_cost_revenue.sales_journal"
|
|
||||||
),
|
|
||||||
"auto_spread": True, # Auto Spread
|
"auto_spread": True, # Auto Spread
|
||||||
"auto_spread_ids": [
|
"auto_spread_ids": [
|
||||||
(0, 0, {"account_id": self.invoice_line.account_id.id})
|
(0, 0, {"account_id": self.invoice_line.account_id.id})
|
||||||
|
@ -5,29 +5,15 @@ import datetime
|
|||||||
|
|
||||||
from odoo import fields
|
from odoo import fields
|
||||||
from odoo.exceptions import UserError, ValidationError
|
from odoo.exceptions import UserError, ValidationError
|
||||||
from odoo.modules.module import get_resource_path
|
|
||||||
from odoo.tests import Form, common
|
from odoo.tests import Form, common
|
||||||
from odoo.tools import convert_file
|
|
||||||
|
|
||||||
|
|
||||||
class TestAccountInvoiceSpread(common.TransactionCase):
|
class TestAccountInvoiceSpread(common.TransactionCase):
|
||||||
def _load(self, module, *args):
|
|
||||||
convert_file(
|
|
||||||
self.cr,
|
|
||||||
"account_spread_cost_revenue",
|
|
||||||
get_resource_path(module, *args),
|
|
||||||
{},
|
|
||||||
"init",
|
|
||||||
False,
|
|
||||||
"test",
|
|
||||||
self.registry._assertion_report,
|
|
||||||
)
|
|
||||||
|
|
||||||
def create_account_invoice(self, invoice_type, quantity=1.0, price_unit=1000.0):
|
def create_account_invoice(self, invoice_type, quantity=1.0, price_unit=1000.0):
|
||||||
""" Create an invoice as in a view by triggering its onchange methods"""
|
"""Create an invoice as in a view by triggering its onchange methods"""
|
||||||
|
|
||||||
invoice_form = Form(
|
invoice_form = Form(
|
||||||
self.env["account.move"].with_context(default_type=invoice_type)
|
self.env["account.move"].with_context(default_move_type=invoice_type)
|
||||||
)
|
)
|
||||||
invoice_form.partner_id = self.env["res.partner"].create(
|
invoice_form.partner_id = self.env["res.partner"].create(
|
||||||
{"name": "Partner Name"}
|
{"name": "Partner Name"}
|
||||||
@ -41,7 +27,41 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self._load("account", "test", "account_minimal_test.xml")
|
|
||||||
|
# Define minimal accounting data to run
|
||||||
|
a_expense = self.env["account.account"].create(
|
||||||
|
{
|
||||||
|
"code": "X2120",
|
||||||
|
"name": "Expenses - (test)",
|
||||||
|
"user_type_id": self.env.ref("account.data_account_type_expenses").id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
a_sale = self.env["account.account"].create(
|
||||||
|
{
|
||||||
|
"code": "X2020",
|
||||||
|
"name": "Product Sales - (test)",
|
||||||
|
"user_type_id": self.env.ref("account.data_account_type_revenue").id,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.expenses_journal = self.env["account.journal"].create(
|
||||||
|
{
|
||||||
|
"name": "Vendor Bills - Test",
|
||||||
|
"code": "TEXJ",
|
||||||
|
"type": "purchase",
|
||||||
|
"default_account_id": a_expense.id,
|
||||||
|
"refund_sequence": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
self.sales_journal = self.env["account.journal"].create(
|
||||||
|
{
|
||||||
|
"name": "Customer Invoices - Test",
|
||||||
|
"code": "TINV",
|
||||||
|
"type": "sale",
|
||||||
|
"default_account_id": a_sale.id,
|
||||||
|
"refund_sequence": True,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
self.account_payable = self.env["account.account"].create(
|
self.account_payable = self.env["account.account"].create(
|
||||||
{
|
{
|
||||||
@ -88,8 +108,11 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Invoices
|
# Invoices
|
||||||
|
|
||||||
self.vendor_bill = self.create_account_invoice("in_invoice")
|
self.vendor_bill = self.create_account_invoice("in_invoice")
|
||||||
|
self.vendor_bill.invoice_date = fields.Date.today()
|
||||||
self.sale_invoice = self.create_account_invoice("out_invoice")
|
self.sale_invoice = self.create_account_invoice("out_invoice")
|
||||||
|
self.sale_invoice.invoice_date = fields.Date.today()
|
||||||
self.vendor_bill_line = self.vendor_bill.invoice_line_ids[0]
|
self.vendor_bill_line = self.vendor_bill.invoice_line_ids[0]
|
||||||
self.invoice_line = self.sale_invoice.invoice_line_ids[0]
|
self.invoice_line = self.sale_invoice.invoice_line_ids[0]
|
||||||
|
|
||||||
@ -174,12 +197,10 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
def test_02_wizard_defaults(self):
|
def test_02_wizard_defaults(self):
|
||||||
Wizard = self.env["account.spread.invoice.line.link.wizard"]
|
Wizard = self.env["account.spread.invoice.line.link.wizard"]
|
||||||
|
|
||||||
exp_journal = self.ref("account_spread_cost_revenue.expenses_journal")
|
|
||||||
sales_journal = self.ref("account_spread_cost_revenue.sales_journal")
|
|
||||||
self.env.company.default_spread_revenue_account_id = self.account_receivable
|
self.env.company.default_spread_revenue_account_id = self.account_receivable
|
||||||
self.env.company.default_spread_expense_account_id = self.account_payable
|
self.env.company.default_spread_expense_account_id = self.account_payable
|
||||||
self.env.company.default_spread_revenue_journal_id = sales_journal
|
self.env.company.default_spread_revenue_journal_id = self.sales_journal
|
||||||
self.env.company.default_spread_expense_journal_id = exp_journal
|
self.env.company.default_spread_expense_journal_id = self.expenses_journal
|
||||||
|
|
||||||
self.assertTrue(self.env.company.default_spread_revenue_account_id)
|
self.assertTrue(self.env.company.default_spread_revenue_account_id)
|
||||||
self.assertTrue(self.env.company.default_spread_expense_account_id)
|
self.assertTrue(self.env.company.default_spread_expense_account_id)
|
||||||
@ -201,7 +222,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
self.assertTrue(wizard1.spread_account_id)
|
self.assertTrue(wizard1.spread_account_id)
|
||||||
self.assertTrue(wizard1.spread_journal_id)
|
self.assertTrue(wizard1.spread_journal_id)
|
||||||
self.assertEqual(wizard1.spread_account_id, self.account_payable)
|
self.assertEqual(wizard1.spread_account_id, self.account_payable)
|
||||||
self.assertEqual(wizard1.spread_journal_id.id, exp_journal)
|
self.assertEqual(wizard1.spread_journal_id.id, self.expenses_journal.id)
|
||||||
self.assertTrue(wizard1.spread_invoice_type_domain_ids)
|
self.assertTrue(wizard1.spread_invoice_type_domain_ids)
|
||||||
|
|
||||||
wizard2 = Wizard.with_context(
|
wizard2 = Wizard.with_context(
|
||||||
@ -218,7 +239,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
self.assertTrue(wizard2.spread_account_id)
|
self.assertTrue(wizard2.spread_account_id)
|
||||||
self.assertTrue(wizard2.spread_journal_id)
|
self.assertTrue(wizard2.spread_journal_id)
|
||||||
self.assertEqual(wizard2.spread_account_id, self.account_receivable)
|
self.assertEqual(wizard2.spread_account_id, self.account_receivable)
|
||||||
self.assertEqual(wizard2.spread_journal_id.id, sales_journal)
|
self.assertEqual(wizard2.spread_journal_id.id, self.sales_journal.id)
|
||||||
self.assertTrue(wizard2.spread_invoice_type_domain_ids)
|
self.assertTrue(wizard2.spread_invoice_type_domain_ids)
|
||||||
|
|
||||||
def test_03_link_invoice_line_with_spread_sheet(self):
|
def test_03_link_invoice_line_with_spread_sheet(self):
|
||||||
@ -241,9 +262,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
self.assertEqual(wizard1.spread_action_type, "link")
|
self.assertEqual(wizard1.spread_action_type, "link")
|
||||||
|
|
||||||
wizard1.spread_account_id = self.account_receivable
|
wizard1.spread_account_id = self.account_receivable
|
||||||
wizard1.spread_journal_id = self.ref(
|
wizard1.spread_journal_id = self.expenses_journal
|
||||||
"account_spread_cost_revenue.expenses_journal"
|
|
||||||
)
|
|
||||||
wizard1.spread_id = self.spread
|
wizard1.spread_id = self.spread
|
||||||
res_action = wizard1.confirm()
|
res_action = wizard1.confirm()
|
||||||
self.assertTrue(isinstance(res_action, dict))
|
self.assertTrue(isinstance(res_action, dict))
|
||||||
@ -277,7 +296,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
|
|
||||||
Wizard = self.env["account.spread.invoice.line.link.wizard"]
|
Wizard = self.env["account.spread.invoice.line.link.wizard"]
|
||||||
|
|
||||||
spread_journal_id = self.ref("account_spread_cost_revenue.expenses_journal")
|
spread_journal_id = self.expenses_journal
|
||||||
|
|
||||||
wizard1 = Wizard.with_context(
|
wizard1 = Wizard.with_context(
|
||||||
default_invoice_line_id=self.vendor_bill_line.id,
|
default_invoice_line_id=self.vendor_bill_line.id,
|
||||||
@ -348,7 +367,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
|
|
||||||
spread_account = self.account_payable
|
spread_account = self.account_payable
|
||||||
self.assertTrue(spread_account)
|
self.assertTrue(spread_account)
|
||||||
spread_journal_id = self.ref("account_spread_cost_revenue.expenses_journal")
|
spread_journal_id = self.expenses_journal.id
|
||||||
|
|
||||||
template = self.env["account.spread.template"].create(
|
template = self.env["account.spread.template"].create(
|
||||||
{
|
{
|
||||||
@ -537,7 +556,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
if spread_ml.debit:
|
if spread_ml.debit:
|
||||||
self.assertFalse(spread_ml.full_reconcile_id)
|
self.assertFalse(spread_ml.full_reconcile_id)
|
||||||
if spread_ml.credit:
|
if spread_ml.credit:
|
||||||
self.assertTrue(spread_ml.full_reconcile_id)
|
self.assertFalse(spread_ml.full_reconcile_id)
|
||||||
|
|
||||||
action_reconcile_view = self.spread2.open_reconcile_view()
|
action_reconcile_view = self.spread2.open_reconcile_view()
|
||||||
self.assertTrue(isinstance(action_reconcile_view, dict))
|
self.assertTrue(isinstance(action_reconcile_view, dict))
|
||||||
@ -648,8 +667,8 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
for spread_ml in spread_mls:
|
for spread_ml in spread_mls:
|
||||||
if spread_ml.debit:
|
if spread_ml.debit:
|
||||||
self.assertEqual(spread_ml.account_id, balance_sheet)
|
self.assertEqual(spread_ml.account_id, balance_sheet)
|
||||||
self.assertTrue(spread_ml.reconciled)
|
self.assertFalse(spread_ml.reconciled)
|
||||||
self.assertTrue(spread_ml.full_reconcile_id)
|
self.assertFalse(spread_ml.full_reconcile_id)
|
||||||
if spread_ml.credit:
|
if spread_ml.credit:
|
||||||
self.assertEqual(spread_ml.account_id, payable_account)
|
self.assertEqual(spread_ml.account_id, payable_account)
|
||||||
self.assertFalse(spread_ml.reconciled)
|
self.assertFalse(spread_ml.reconciled)
|
||||||
@ -662,7 +681,7 @@ class TestAccountInvoiceSpread(common.TransactionCase):
|
|||||||
|
|
||||||
action_reconcile_view = self.spread2.open_reconcile_view()
|
action_reconcile_view = self.spread2.open_reconcile_view()
|
||||||
self.assertTrue(isinstance(action_reconcile_view, dict))
|
self.assertTrue(isinstance(action_reconcile_view, dict))
|
||||||
self.assertTrue(action_reconcile_view.get("domain")[0][2])
|
self.assertFalse(action_reconcile_view.get("domain")[0][2])
|
||||||
self.assertFalse(action_reconcile_view.get("res_id"))
|
self.assertFalse(action_reconcile_view.get("res_id"))
|
||||||
self.assertTrue(action_reconcile_view.get("context"))
|
self.assertTrue(action_reconcile_view.get("context"))
|
||||||
|
|
||||||
|
@ -311,9 +311,7 @@ class TestComputeSpreadBoard(common.TransactionCase):
|
|||||||
attrs = spread_line.open_move()
|
attrs = spread_line.open_move()
|
||||||
self.assertTrue(isinstance(attrs, dict))
|
self.assertTrue(isinstance(attrs, dict))
|
||||||
|
|
||||||
# post and then unlink all created moves
|
# unlink all created moves
|
||||||
for line in self.spread.line_ids:
|
|
||||||
line.move_id.post()
|
|
||||||
self.spread.line_ids.unlink_move()
|
self.spread.line_ids.unlink_move()
|
||||||
for spread_line in self.spread.line_ids:
|
for spread_line in self.spread.line_ids:
|
||||||
self.assertFalse(spread_line.move_id)
|
self.assertFalse(spread_line.move_id)
|
||||||
@ -375,9 +373,9 @@ class TestComputeSpreadBoard(common.TransactionCase):
|
|||||||
self.spread.compute_spread_board()
|
self.spread.compute_spread_board()
|
||||||
spread_lines = self.spread.line_ids
|
spread_lines = self.spread.line_ids
|
||||||
self.assertEqual(len(spread_lines), 3)
|
self.assertEqual(len(spread_lines), 3)
|
||||||
self.assertAlmostEquals(115.32, spread_lines[0].amount)
|
self.assertAlmostEqual(115.32, spread_lines[0].amount)
|
||||||
self.assertAlmostEquals(115.32, spread_lines[1].amount)
|
self.assertAlmostEqual(115.32, spread_lines[1].amount)
|
||||||
self.assertAlmostEquals(115.32, spread_lines[2].amount)
|
self.assertAlmostEqual(115.32, spread_lines[2].amount)
|
||||||
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
self.assertEqual(datetime.date(2017, 1, 31), spread_lines[0].date)
|
||||||
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
self.assertEqual(datetime.date(2017, 2, 28), spread_lines[1].date)
|
||||||
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
self.assertEqual(datetime.date(2017, 3, 31), spread_lines[2].date)
|
||||||
@ -572,10 +570,10 @@ class TestComputeSpreadBoard(common.TransactionCase):
|
|||||||
for line in spread_lines:
|
for line in spread_lines:
|
||||||
self.assertFalse(line.move_id)
|
self.assertFalse(line.move_id)
|
||||||
|
|
||||||
spread_lines[0]._create_moves().post()
|
spread_lines[0]._create_moves().action_post()
|
||||||
spread_lines[1]._create_moves().post()
|
spread_lines[1]._create_moves().action_post()
|
||||||
spread_lines[2]._create_moves().post()
|
spread_lines[2]._create_moves().action_post()
|
||||||
spread_lines[3]._create_moves().post()
|
spread_lines[3]._create_moves().action_post()
|
||||||
|
|
||||||
self.assertEqual(spread_lines[0].move_id.state, "posted")
|
self.assertEqual(spread_lines[0].move_id.state, "posted")
|
||||||
self.assertEqual(spread_lines[1].move_id.state, "posted")
|
self.assertEqual(spread_lines[1].move_id.state, "posted")
|
||||||
|
@ -269,7 +269,7 @@
|
|||||||
string="Create Move"
|
string="Create Move"
|
||||||
type="object"
|
type="object"
|
||||||
groups="account.group_account_manager"
|
groups="account.group_account_manager"
|
||||||
attrs="{'invisible':['|',('move_id','!=',False)]}"
|
attrs="{'invisible':[('move_id','!=',False)]}"
|
||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
name="open_move"
|
name="open_move"
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
/>
|
/>
|
||||||
<field
|
<field
|
||||||
name="exp_rev_account_id"
|
name="exp_rev_account_id"
|
||||||
attrs="{'invisible': ['|', ('use_invoice_line_account', '=', False)], 'required': [('use_invoice_line_account', '=', True)]}"
|
attrs="{'invisible': [('use_invoice_line_account', '=', False)], 'required': [('use_invoice_line_account', '=', True)]}"
|
||||||
domain="[('company_id', '=', company_id), ('deprecated', '=', False)]"
|
domain="[('company_id', '=', company_id), ('deprecated', '=', False)]"
|
||||||
options="{'no_create': True}"
|
options="{'no_create': True}"
|
||||||
/>
|
/>
|
||||||
|
@ -88,7 +88,7 @@ class AccountSpreadInvoiceLineLinkWizard(models.TransientModel):
|
|||||||
def _compute_invoice_type(self):
|
def _compute_invoice_type(self):
|
||||||
for wizard in self:
|
for wizard in self:
|
||||||
invoice = wizard.invoice_line_id.move_id
|
invoice = wizard.invoice_line_id.move_id
|
||||||
wizard.invoice_type = invoice.type
|
wizard.invoice_type = invoice.move_type
|
||||||
if invoice.is_sale_document(include_receipts=True):
|
if invoice.is_sale_document(include_receipts=True):
|
||||||
wizard.spread_type = "sale"
|
wizard.spread_type = "sale"
|
||||||
else:
|
else:
|
||||||
|
Loading…
Reference in New Issue
Block a user