Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[16.0][FIX] account_move_line_purchase_info: do not consider stock entry lines on revaluations #2018

Open
wants to merge 1 commit into
base: 16.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions account_move_line_purchase_info/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ This module will add the purchase order line to journal items.
The ultimate goal is to establish the purchase order line as one of the key
fields to reconcile the Goods Received Not Invoiced accrual account.

Field purchase_line_id_oca it's necessary. In Odoo >=16 automatic
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Field purchase_line_id_oca it's necessary. In Odoo >=16 automatic
Field purchase_line_id_oca is necessary. In Odoo >=16 automatic

revaluation for a product with FIFO costing method only works if invoice
lines related to a purchase order line do not include stock journal items.
To aviod that purchase_line_id_oca includes invoice and stock journal items,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
To aviod that purchase_line_id_oca includes invoice and stock journal items,
To avoid that purchase_line_id_oca includes invoice and stock journal items,

and we keep Odoo field invoice_lines just with bill lines.
- Check issue https://github.com/OCA/account-financial-tools/issues/2017

**Table of contents**

.. contents::
Expand Down
2 changes: 1 addition & 1 deletion account_move_line_purchase_info/__manifest__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
{
"name": "Account Move Line Purchase Info",
"summary": "Introduces the purchase order line to the journal items",
"version": "16.0.1.0.0",
"version": "16.0.2.0.0",
"author": "ForgeFlow, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/account-financial-tools",
"category": "Generic",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
purchase_orders = env["purchase.order"].search([("state", "=", "purchase")])
for order in purchase_orders:
valued_lines = order.order_line.invoice_lines.filtered(
lambda l: l.product_id
and l.product_id.cost_method != "standard"
and (not l.company_id.tax_lock_date or l.date > l.company_id.tax_lock_date)
)
svls, _amls = valued_lines._apply_price_difference()

if svls:
svls._validate_accounting_entries()

bills = order.invoice_ids.filtered(lambda bill: bill.state == "posted")
bills._stock_account_anglo_saxon_reconcile_valuation()
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from openupgradelib import openupgrade


@openupgrade.migrate()
def migrate(env, version):
openupgrade.logged_query(
env.cr,
"""
ALTER TABLE account_move_line
ADD COLUMN IF NOT EXISTS purchase_line_id_oca INTEGER;
""",
)

openupgrade.logged_query(
env.cr,
"""
UPDATE account_move_line
SET purchase_line_id_oca = purchase_line_id;
""",
)

openupgrade.logged_query(
env.cr,
"""
UPDATE account_move_line
SET purchase_line_id = NULL
FROM account_move
WHERE account_move_line.move_id = account_move.id
AND account_move.move_type = 'entry';
""",
)
26 changes: 25 additions & 1 deletion account_move_line_purchase_info/models/account_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,38 @@
# (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).

from odoo import fields, models
from odoo import api, fields, models


class AccountMoveLine(models.Model):
_inherit = "account.move.line"

# Set related None, to make it compute and avoid base related to purchase_line_id
purchase_order_id = fields.Many2one(
comodel_name="purchase.order",
related=None,
store=True,
index=True,
compute="_compute_purchase_id",
)

purchase_line_id_oca = fields.Many2one(
comodel_name="purchase.order.line",
string="Purchase line OCA",
store=True,
index=True,
compute="_compute_purchase_line_id_oca",
)

@api.depends("purchase_line_id")
def _compute_purchase_line_id_oca(self):
for rec in self:
if rec.purchase_line_id:
rec.purchase_line_id_oca = rec.purchase_line_id

@api.depends("purchase_line_id", "purchase_line_id_oca")
def _compute_purchase_id(self):
for rec in self:
rec.purchase_order_id = (
rec.purchase_line_id.order_id.id or rec.purchase_line_id_oca.order_id.id
)
19 changes: 4 additions & 15 deletions account_move_line_purchase_info/models/purchase_order.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
class PurchaseOrder(models.Model):
_inherit = "purchase.order"

@api.depends("order_line.invoice_lines.move_id")
@api.depends("order_line.stock_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"
)
journal_entries = order.mapped(
"order_line.stock_invoice_lines.move_id"
).filtered(lambda r: r.move_type == "entry")
order.journal_entry_ids = journal_entries
order.journal_entries_count = len(journal_entries)

Expand All @@ -21,17 +21,6 @@ def _compute_journal_entries(self):
string="Journal Entries",
)

@api.depends("order_line.invoice_lines.move_id")
def _compute_invoice(self):
"""Overwritten compute to avoid show all Journal Entries with
purchase_order_line as invoice_lines One2many would take them into account."""
for order in self:
invoices = order.order_line.invoice_lines.move_id.filtered(
lambda m: m.is_invoice(include_receipts=True)
)
order.invoice_ids = 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
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
# Copyright 2019-2020 ForgeFlow S.L.
# (https://www.forgeflow.com)
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
from odoo import models
from odoo import fields, models


class PurchaseOrderLine(models.Model):
_inherit = "purchase.order.line"

stock_invoice_lines = fields.One2many(
"account.move.line", "purchase_line_id_oca", readonly=True, copy=False
)

def name_get(self):
result = []
orig_name = dict(super(PurchaseOrderLine, self).name_get())
Expand Down
2 changes: 1 addition & 1 deletion account_move_line_purchase_info/models/stock_move.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@ def _prepare_account_move_line(
qty, cost, credit_account_id, debit_account_id, svl_id, description
)
for line in res:
line[2]["purchase_line_id"] = self.purchase_line_id.id
line[2]["purchase_line_id_oca"] = self.purchase_line_id.id
return res
7 changes: 7 additions & 0 deletions account_move_line_purchase_info/readme/DESCRIPTION.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,10 @@ This module will add the purchase order line to journal items.

The ultimate goal is to establish the purchase order line as one of the key
fields to reconcile the Goods Received Not Invoiced accrual account.

Field purchase_line_id_oca it's necessary. In Odoo >=16 automatic
revaluation for a product with FIFO costing method only works if invoice
lines related to a purchase order line do not include stock journal items.
To aviod that purchase_line_id_oca includes invoice and stock journal items,
and we keep Odoo field invoice_lines just with bill lines.
- Check issue https://github.com/OCA/account-financial-tools/issues/2017
18 changes: 13 additions & 5 deletions account_move_line_purchase_info/static/description/index.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
Expand All @@ -9,10 +8,11 @@

/*
:Author: David Goodger ([email protected])
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.

Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.

See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
Expand Down Expand Up @@ -275,7 +275,7 @@
margin-left: 2em ;
margin-right: 2em }

pre.code .ln { color: grey; } /* line numbers */
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
Expand All @@ -301,7 +301,7 @@
span.pre {
white-space: pre }

span.problematic {
span.problematic, pre.problematic {
color: red }

span.section-subtitle {
Expand Down Expand Up @@ -373,6 +373,12 @@ <h1 class="title">Account Move Line Purchase Info</h1>
<p>This module will add the purchase order line to journal items.</p>
<p>The ultimate goal is to establish the purchase order line as one of the key
fields to reconcile the Goods Received Not Invoiced accrual account.</p>
<p>Field purchase_line_id_oca it’s necessary. In Odoo &gt;=16 automatic
revaluation for a product with FIFO costing method only works if invoice
lines related to a purchase order line do not include stock journal items.
To aviod that purchase_line_id_oca includes invoice and stock journal items,
and we keep Odoo field invoice_lines just with bill lines.
- Check issue <a class="reference external" href="https://github.com/OCA/account-financial-tools/issues/2017">https://github.com/OCA/account-financial-tools/issues/2017</a></p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
Expand Down Expand Up @@ -423,7 +429,9 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def _check_account_balance(
"""
domain = [("account_id", "=", account_id)]
if purchase_line:
domain.extend([("purchase_line_id", "=", purchase_line.id)])
domain.extend([("purchase_line_id_oca", "=", purchase_line.id)])

balance = self._get_balance(domain)
if purchase_line:
Expand Down
Loading