Odoo 如何通过代码将 account.move.line 插入到 account.move?
Odoo How to insert account.move.line to account.move by code?
我用代码插入account.move.line到account.move时遇到问题
一直说'Cannot create unbalanced journal entry.'。
是否有办法通过代码将 account.move.line 添加到 account.move?
ps。 debit_line 和 credit_line 的贷方和借方金额相同。
以下是我的代码:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__)
class JobLine(models.Model):
_inherit = 'product.job_line'
value = fields.Float()
journal_entry = fields.Many2one('account.move')
cost = fields.Float()
@api.onchange('is_finish')
def update_journal(self):
if self.is_finish:
revenue_account = self.product.revenue_account
deferred_receivable_account = self.env['ir.values'].get_default('job.config.settings','deferred_receivable_account')
journal = self.env['ir.values'].get_default('job.config.settings','journal')
if not self.journal_entry :
self.journal_entry = self.env['account.move'].create({
'journal_id': journal,
'partner_id': self.container.partner.id,
'date': fields.Date.context_today(self)
})
# if self.container.order.invoice_count > 0:
# _logger.info('Type 1 : ')
# else:
# _logger.info('Type 2 : ')
debit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': deferred_receivable_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'debit': self.cost
})
credit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
_logger.info(str(debit_line)+' '+str(credit_line))
self.journal_entry.line_ids+=debit_line
self.journal_entry.line_ids+=credit_line
else:
self.journal_entry.unlink()
_logger.info('No finish Yet '+str(self.journal_entry))
而不是这个
credit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
试试这个
credit_line = self.env['account.move.line'].with_context(
check_move_validity=False).create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
通过在上下文中将 check_move_validity 传递给 False,可以防止模型在创建移动线后检查数据一致性。
link to source code
希望他能帮上忙:-)
我用代码插入account.move.line到account.move时遇到问题
一直说'Cannot create unbalanced journal entry.'。
是否有办法通过代码将 account.move.line 添加到 account.move?
ps。 debit_line 和 credit_line 的贷方和借方金额相同。
以下是我的代码:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import logging
_logger = logging.getLogger(__name__)
class JobLine(models.Model):
_inherit = 'product.job_line'
value = fields.Float()
journal_entry = fields.Many2one('account.move')
cost = fields.Float()
@api.onchange('is_finish')
def update_journal(self):
if self.is_finish:
revenue_account = self.product.revenue_account
deferred_receivable_account = self.env['ir.values'].get_default('job.config.settings','deferred_receivable_account')
journal = self.env['ir.values'].get_default('job.config.settings','journal')
if not self.journal_entry :
self.journal_entry = self.env['account.move'].create({
'journal_id': journal,
'partner_id': self.container.partner.id,
'date': fields.Date.context_today(self)
})
# if self.container.order.invoice_count > 0:
# _logger.info('Type 1 : ')
# else:
# _logger.info('Type 2 : ')
debit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': deferred_receivable_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'debit': self.cost
})
credit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
_logger.info(str(debit_line)+' '+str(credit_line))
self.journal_entry.line_ids+=debit_line
self.journal_entry.line_ids+=credit_line
else:
self.journal_entry.unlink()
_logger.info('No finish Yet '+str(self.journal_entry))
而不是这个
credit_line = self.env['account.move.line'].create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
试试这个
credit_line = self.env['account.move.line'].with_context(
check_move_validity=False).create({
'move_id': self.journal_entry.id,
'account_id': self.product.revenue_account,
'partner_id': self.container.partner.id,
'name': 'Finish '+self.job_name,
'credit': self.cost
})
通过在上下文中将 check_move_validity 传递给 False,可以防止模型在创建移动线后检查数据一致性。 link to source code
希望他能帮上忙:-)