87 lines
4.2 KiB
Python
87 lines
4.2 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import models, api, fields, _
|
|
from odoo.exceptions import UserError
|
|
|
|
class AccountMove(models.Model):
|
|
_inherit = 'account.move'
|
|
|
|
def action_post(self):
|
|
res = super().action_post()
|
|
|
|
# 1. Handle Centralized entries in Parent when payment moves are posted
|
|
for move in self:
|
|
payments = move.payment_ids or move.origin_payment_id
|
|
if not payments:
|
|
continue
|
|
|
|
centralized_payments = payments.filtered(
|
|
lambda p: p.journal_id.sudo().is_centralized and
|
|
p.company_id != p.journal_id.sudo().parent_company_id
|
|
)
|
|
|
|
for payment in centralized_payments:
|
|
journal_sudo = payment.journal_id.sudo()
|
|
parent_company = journal_sudo.parent_company_id
|
|
parent_journal = journal_sudo.parent_journal_id
|
|
parent_rk_account = journal_sudo.parent_intercompany_account_id
|
|
|
|
if not journal_sudo.branch_intercompany_account_id:
|
|
raise UserError(_("Please configure the Branch Inter-company Account on journal %s", payment.journal_id.name))
|
|
if not parent_journal or not parent_rk_account:
|
|
raise UserError(_("Please configure the Parent Journal and RK Account on journal %s", payment.journal_id.name))
|
|
|
|
parent_journal_sudo = parent_journal.sudo()
|
|
parent_rk_account_sudo = parent_rk_account.sudo()
|
|
|
|
print(f">>> DEBUG: Centralized Payment for {payment.name}")
|
|
print(f" Company: {payment.company_id.id}, Parent Co: {parent_company.id}")
|
|
print(f" Parent Journal: {parent_journal_sudo.name} (ID: {parent_journal_sudo.id})")
|
|
print(f" Parent RK: {parent_rk_account_sudo.code} (ID: {parent_rk_account_sudo.id})")
|
|
|
|
# Calculate currency-adjusted amount for the parent company
|
|
parent_currency = parent_company.currency_id
|
|
if payment.currency_id != parent_currency:
|
|
amount_parent_curr = payment.currency_id._convert(
|
|
payment.amount, parent_currency, parent_company, payment.date
|
|
)
|
|
else:
|
|
amount_parent_curr = payment.amount
|
|
|
|
# Create the mirroring entry in Parent using sudo
|
|
parent_move = self.env['account.move'].sudo().with_company(parent_company).create({
|
|
'move_type': 'entry',
|
|
'date': payment.date,
|
|
'company_id': parent_company.id,
|
|
'journal_id': parent_journal.id,
|
|
'currency_id': parent_currency.id,
|
|
'ref': f"Centralized Payment: {payment.name} ({payment.company_id.name})",
|
|
'line_ids': [
|
|
(0, 0, {
|
|
'name': payment.memo or f"Centralized Payment: {payment.name}",
|
|
'account_id': parent_rk_account.id,
|
|
'debit': amount_parent_curr,
|
|
'credit': 0.0,
|
|
'partner_id': payment.partner_id.id,
|
|
'company_id': parent_company.id,
|
|
'currency_id': payment.currency_id.id,
|
|
'amount_currency': payment.amount,
|
|
'display_type': 'product',
|
|
}),
|
|
(0, 0, {
|
|
'name': payment.memo or f"Centralized Payment: {payment.name}",
|
|
'account_id': parent_journal_sudo.default_account_id.id,
|
|
'debit': 0.0,
|
|
'credit': amount_parent_curr,
|
|
'partner_id': payment.partner_id.id,
|
|
'company_id': parent_company.id,
|
|
'currency_id': payment.currency_id.id,
|
|
'amount_currency': -payment.amount,
|
|
'display_type': 'product',
|
|
}),
|
|
]
|
|
})
|
|
parent_move.sudo().action_post()
|
|
print(f" Parent Move Posted: {parent_move.name}")
|
|
|
|
return res
|