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

[15.0][OU-FIX] fix hr.expense account.move and lines #4577

Open
wants to merge 2 commits into
base: 15.0
Choose a base branch
from
Open
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
55 changes: 27 additions & 28 deletions openupgrade_scripts/scripts/hr_expense/15.0.2.0/post-migration.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,36 +14,35 @@ def _fill_payment_state(env):
openupgrade.logged_query(
env.cr,
"""
UPDATE account_move_line
SET exclude_from_invoice_tab=(coalesce(quantity, 0) = 0)
WHERE expense_id IS NOT NULL
UPDATE account_move_line AS aml
SET exclude_from_invoice_tab = true
FROM account_account AS aa
INNER JOIN account_account_type AS aat ON
aa.user_type_id = aat.id
WHERE
aml.account_id = aa.id AND
aml.expense_id IS NOT NULL AND
aat.type = 'payable'
""",
)
# Recompute payment_state for the moves associated to the expenses, as on
# v14 these ones were not computed being of type `entry`, which changes now
# on v15 if the method `_payment_state_matters` returns True, which is the
# case for the expense moves
for move in env["hr.expense.sheet"].search([]).account_move_id:
# Extracted and adapted from _compute_amount() in account.move
new_pmt_state = "not_paid" if move.move_type != "entry" else False
total_to_pay = total_residual = 0.0
for line in move.line_ids:
if line.account_id.user_type_id.type in ("receivable", "payable"):
total_to_pay += line.balance
total_residual += line.amount_residual
currencies = move._get_lines_onchange_currency().currency_id
currency = currencies if len(currencies) == 1 else move.company_id.currency_id
if currency.is_zero(move.amount_residual):
reconciled_payments = move._get_reconciled_payments()
if not reconciled_payments or all(
payment.is_matched for payment in reconciled_payments
):
new_pmt_state = "paid"
else:
new_pmt_state = move._get_invoice_in_payment_state()
elif currency.compare_amounts(total_to_pay, total_residual) != 0:
new_pmt_state = "partial"
move.payment_state = new_pmt_state
# Disable fiscalyear_lock_date check
_check_fiscalyear_lock_date = env[
"account.move"
].__class__._check_fiscalyear_lock_date
env["account.move"].__class__._check_fiscalyear_lock_date = lambda self: None
# Recompute several fields (always_tax_exigible, amount_residual,
# amount_residual_signed, amount_untaxed, amount_untaxed_signed,
# payment_state) for the moves associated to the expenses, as on v14 these
# ones were not computed being of type `entry`, which changes now on v15
# if the method `_payment_state_matters` returns True, which is the case
# for the expense moves
env["account.move"].with_context(active_test=False, tracking_disable=True).search(
[("line_ids.expense_id", "!=", False)]
)._compute_amount()
# Enable fiscalyear_lock_date check
env[
"account.move"
].__class__._check_fiscalyear_lock_date = _check_fiscalyear_lock_date


@openupgrade.migrate()
Expand Down
Loading