İçereği Atla
Menü
Bu soru işaretlendi
3 Cevaplar
5098 Görünümler

I'n Odoo9 there is method

@api.one
@api.depends(
'state', 'currency_id', 'invoice_line_ids.price_subtotal',
'move_id.line_ids.amount_residual',
'move_id.line_ids.currency_id')
def _compute_residual(self):
residual = 0.0
residual_company_signed = 0.0
sign = self.type in ['in_refund', 'out_refund'] and -1 or 1
for line in self.sudo().move_id.line_ids:
if line.account_id.internal_type in ('receivable', 'payable'):
residual_company_signed += line.amount_residual
if line.currency_id == self.currency_id:
residual += line.amount_residual_currency if line.currency_id else line.amount_residual
else:
from_currency = (line.currency_id and line.currency_id.with_context(date=line.date)) or line.company_id.currency_id.with_context(date=line.date)
residual += from_currency.compute(line.amount_residual, self.currency_id)
self.residual_company_signed = abs(residual_company_signed) * sign
self.residual_signed = abs(residual) * sign
self.residual = abs(residual)
digits_rounding_precision = self.currency_id.rounding
if float_is_zero(self.residual, precision_rounding=digits_rounding_precision):
self.reconciled = True
else:
self.reconciled = False

in Vendor Bills if in line account selected is payable then when confirming invoice, residual amount gets double. is there any solution that can fix this?




Avatar
Vazgeç

what's the purpose to pass payable/receivable account on line level

Üretici En İyi Yanıt

Actually, I found a workaround for this problem

@api.one
@api.depends(
'state', 'currency_id',
'move_id.line_ids.amount_residual',
# Fixes the fact that move_id.line_id.amount_residual, being not stored and old API, doesn't trigger recomputation
'move_id.line_ids.reconcile_id',
'move_id.line_ids.amount_residual_currency',
'move_id.line_ids.currency_id',
# 'move_id.line_ids.reconcile_partial_id.line_partial_ids.invoice.type',
)
# An invoice's residual amount is the sum of its unreconciled move lines and,
# for partially reconciled move lines, their residual amount divided by the
# number of times this reconciliation is used in an invoice (so we split
# the residual amount between all invoice)
def _compute_residual(self):
self.residual = 0.0
# Each partial reconciliation is considered only once for each invoice it appears into,
# and its residual amount is divided by this number of invoices
partial_reconciliations_done = []
residual = 0.00
for line in self.sudo().move_id.line_ids:

if line.account_id.id == self.account_id.id:
# Get the correct line residual amount
if line.currency_id == self.currency_id:
line_amount = line.currency_id and line.amount_residual_currency or line.amount_residual
else:
from_currency = line.company_id.currency_id.with_context(date=line.date)
line_amount = from_currency.compute(line.amount_residual, self.currency_id)
# For partially reconciled lines, split the residual amount
if line.reconcile_partial_id:
partial_reconciliation_invoices = set()
for pline in line.reconcile_partial_id.line_partial_ids:
if pline.invoice and self.type == pline.invoice.type:
partial_reconciliation_invoices.update([pline.invoice.id])
line_amount = self.currency_id.round(line_amount / len(partial_reconciliation_invoices))
partial_reconciliations_done.append(line.reconcile_partial_id.id)
residual += line_amount
self.residual = residual
Avatar
Vazgeç

Follow the statdards or else workflow will not work.

You can try like this.

@api.one

@api.depends(

'state', 'currency_id', 'invoice_line_ids.price_subtotal',

'move_id.line_ids.amount_residual',

'move_id.line_ids.currency_id')

def _compute_residual(self):

residual = 0.0

residual_company_signed = 0.0

sign = self.type in ['in_refund', 'out_refund'] and -1 or 1

for line in self.sudo().move_id.line_ids:

if line.account_id == self.account_id:

residual_company_signed += line.amount_residual

if line.currency_id == self.currency_id:

residual += line.amount_residual_currency if line.currency_id else line.amount_residual

else:

from_currency = (line.currency_id and line.currency_id.with_context(date=line.date)) or line.company_id.currency_id.with_context(date=line.date)

residual += from_currency.compute(line.amount_residual, self.currency_id)

self.residual_company_signed = abs(residual_company_signed) * sign

self.residual_signed = abs(residual) * sign

self.residual = abs(residual)

digits_rounding_precision = self.currency_id.rounding

if float_is_zero(self.residual, precision_rounding=digits_rounding_precision):

self.reconciled = True

else:

self.reconciled = False

En İyi Yanıt

Yes, Odoo by default it will sum all payable and receivable amount_residual from invoice related Journal Entry.
You can't pass payable/receivable accounts on Line level.

Avatar
Vazgeç
İlgili Gönderiler Cevaplar Görünümler Aktivite
1
Eki 22
2724
0
Kas 23
991
0
Şub 21
2261
1
Ara 19
6852
0
Mar 20
1769