[15.0][FIX] account_move_line_purchase_info: separate vendor bills from journal entries on PO
This commit is contained in:
parent
a4615ba11a
commit
59bc46ed26
@ -11,6 +11,10 @@
|
|||||||
"category": "Generic",
|
"category": "Generic",
|
||||||
"depends": ["purchase_stock"],
|
"depends": ["purchase_stock"],
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"data": ["security/account_security.xml", "views/account_move_view.xml"],
|
"data": [
|
||||||
|
"security/account_security.xml",
|
||||||
|
"views/account_move_view.xml",
|
||||||
|
"views/purchase_order_view.xml",
|
||||||
|
],
|
||||||
"installable": True,
|
"installable": True,
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
from . import account_move
|
from . import account_move
|
||||||
from . import purchase_order_line
|
from . import purchase_order_line
|
||||||
from . import stock_move
|
from . import stock_move
|
||||||
|
from . import purchase_order
|
||||||
|
@ -1,9 +1,26 @@
|
|||||||
from odoo import api, models
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
class PurchaseOrder(models.Model):
|
class PurchaseOrder(models.Model):
|
||||||
_inherit = "purchase.order"
|
_inherit = "purchase.order"
|
||||||
|
|
||||||
|
@api.depends("order_line.invoice_lines.move_id")
|
||||||
|
def _compute_journal_entries(self):
|
||||||
|
for order in self:
|
||||||
|
journal_entries = order.mapped("order_line.invoice_lines.move_id").filtered(
|
||||||
|
lambda r: r.move_type == "entry"
|
||||||
|
)
|
||||||
|
order.journal_entry_ids = journal_entries
|
||||||
|
order.journal_entries_count = len(journal_entries)
|
||||||
|
|
||||||
|
journal_entries_count = fields.Integer(compute="_compute_journal_entries")
|
||||||
|
journal_entry_ids = fields.Many2many(
|
||||||
|
comodel_name="account.move",
|
||||||
|
relation="journal_entries_ids_purchase_order",
|
||||||
|
compute="_compute_journal_entries",
|
||||||
|
string="Journal Entries",
|
||||||
|
)
|
||||||
|
|
||||||
@api.depends("order_line.invoice_lines.move_id")
|
@api.depends("order_line.invoice_lines.move_id")
|
||||||
def _compute_invoice(self):
|
def _compute_invoice(self):
|
||||||
"""Overwritten compute to avoid show all Journal Entries with
|
"""Overwritten compute to avoid show all Journal Entries with
|
||||||
@ -14,3 +31,33 @@ class PurchaseOrder(models.Model):
|
|||||||
)
|
)
|
||||||
order.invoice_ids = invoices
|
order.invoice_ids = invoices
|
||||||
order.invoice_count = len(invoices)
|
order.invoice_count = len(invoices)
|
||||||
|
|
||||||
|
def action_view_journal_entries(self, invoices=False):
|
||||||
|
"""This function returns an action that display existing journal entries of
|
||||||
|
given purchase order ids. When only one found, show the journal entry
|
||||||
|
immediately.
|
||||||
|
"""
|
||||||
|
if not invoices:
|
||||||
|
self.sudo()._read(["journal_entry_ids"])
|
||||||
|
invoices = self.journal_entry_ids
|
||||||
|
|
||||||
|
result = self.env["ir.actions.act_window"]._for_xml_id(
|
||||||
|
"account.action_move_in_invoice_type"
|
||||||
|
)
|
||||||
|
# choose the view_mode accordingly
|
||||||
|
if len(invoices) > 1:
|
||||||
|
result["domain"] = [("id", "in", invoices.ids)]
|
||||||
|
elif len(invoices) == 1:
|
||||||
|
res = self.env.ref("account.view_move_form", False)
|
||||||
|
form_view = [(res and res.id or False, "form")]
|
||||||
|
if "views" in result:
|
||||||
|
result["views"] = form_view + [
|
||||||
|
(state, view) for state, view in result["views"] if view != "form"
|
||||||
|
]
|
||||||
|
else:
|
||||||
|
result["views"] = form_view
|
||||||
|
result["res_id"] = invoices.id
|
||||||
|
else:
|
||||||
|
result = {"type": "ir.actions.act_window_close"}
|
||||||
|
|
||||||
|
return result
|
||||||
|
@ -225,3 +225,21 @@ class TestAccountMoveLinePurchaseInfo(common.TransactionCase):
|
|||||||
)
|
)
|
||||||
name_get_no_ctx = po_line.name_get()
|
name_get_no_ctx = po_line.name_get()
|
||||||
self.assertEqual(name_get_no_ctx, [(po_line.id, po_line.name)])
|
self.assertEqual(name_get_no_ctx, [(po_line.id, po_line.name)])
|
||||||
|
|
||||||
|
def test_purchase_order_with_journal_entries_and_vendor_bills(self):
|
||||||
|
purchase = self._create_purchase([(self.product, 1)])
|
||||||
|
purchase.button_confirm()
|
||||||
|
purchase._compute_invoice()
|
||||||
|
purchase._compute_journal_entries()
|
||||||
|
self.assertEqual(purchase.journal_entry_ids.id, False)
|
||||||
|
self.assertEqual(purchase.invoice_ids.id, False)
|
||||||
|
self.assertEqual(purchase.journal_entries_count, 0)
|
||||||
|
self.assertEqual(purchase.invoice_count, 0)
|
||||||
|
purchase.picking_ids.move_ids_without_package.quantity_done = 1
|
||||||
|
purchase.picking_ids.button_validate()
|
||||||
|
self.assertEqual(purchase.journal_entries_count, 1)
|
||||||
|
self.assertEqual(purchase.invoice_count, 0)
|
||||||
|
purchase.action_create_invoice()
|
||||||
|
self.assertEqual(purchase.journal_entries_count, 1)
|
||||||
|
self.assertEqual(purchase.invoice_count, 1)
|
||||||
|
self.assertNotEqual(purchase.action_view_journal_entries(), None)
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
<odoo>
|
||||||
|
<record id="view_move_line_journal_entries_form" model="ir.ui.view">
|
||||||
|
<field name="name">purchase.order.form.journal.entry</field>
|
||||||
|
<field name="model">purchase.order</field>
|
||||||
|
<field name="inherit_id" ref="purchase.purchase_order_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<button name="action_view_invoice" position="after">
|
||||||
|
<button
|
||||||
|
type="object"
|
||||||
|
name="action_view_journal_entries"
|
||||||
|
class="oe_stat_button"
|
||||||
|
icon="fa-list-ul"
|
||||||
|
attrs="{'invisible':['|', ('journal_entries_count', '=', 0), ('state', 'in', ('draft','sent','to approve'))]}"
|
||||||
|
groups="account.group_account_user"
|
||||||
|
>
|
||||||
|
<field
|
||||||
|
name="journal_entries_count"
|
||||||
|
widget="statinfo"
|
||||||
|
string="Journal Entries"
|
||||||
|
/>
|
||||||
|
<field name='journal_entry_ids' invisible="1" />
|
||||||
|
</button>
|
||||||
|
</button>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
Loading…
Reference in New Issue
Block a user