【发布时间】:2025-11-27 20:25:02
【问题描述】:
我有一个包含以下类的自定义模块:
class parent_model(osv.osv):
"""parent model"""
_name = "parent_model"
_description = "parent model description"
_columns = {
'partner_id': fields.many2one('res.partner', 'Partener'),
'total_amount': fields.float('Total amount cashed', digits=(12,2)),
'line_ids': fields.one2many('child.model', 'operation_id', 'Reconcile'),
'reconciliere': fields.selection([('1', 'Manual'),('2', 'Automata')], 'Modalitate reconciliere', required=True),
'amount_adv': fields.float('Payment in advance', digits=(12,2))
}
class child_model(osv.osv):
"""child model"""
_name = "child model"
_description = "child model description"
_columns = {
'partner_id': fields.many2one('res.partner', 'Partener', required=True, readonly=True),
'operation_id': fields.many2one('parent.model', 'Bank account operation', readonly=True),
'invoice_id': fields.many2one('invoice.trx', 'Invoice', readonly=True),
'sold_initial': fields.float('Initial sold of the invoice', digits=(12,2), readonly=True),
'sold_open': fields.float('Open transaction sold', digits=(12,2), readonly=True),
'val_trx': fields.float('Amount to be cashed paid', digits=(12,2)),
'sold_final': fields.float('Final sold', digits=(12,2), readonly=True),
'val_all': fields.boolean('Reconcile entire value')
}
class invoice_trx(osv.osv):
"""Invoice model"""
_name = "invoice_trx"
_description = "Invoices model description"
_columns = {
'partner_id': fields.many2one('res.partner', 'Partener'),
'sold_initial': fields.float('Initial sold of the invoice', digits=(12,2), readonly=True),
'sold_open': fields.float('Open transaction sold', digits=(12,2), readonly=True),
'val_trx': fields.float('Amount to be cashed paid', digits=(12,2)),
'sold_final': fields.float('Final sold', digits=(12,2), readonly=True)
}
我有一个 onchange 方法用所选合作伙伴 ID 的发票填充 one2many 字段:
def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
res = {'value':{}}
invoice_lines = []
line_pool = self.pool.get('child.model')
if not partner_id:
return default
line_ids = ids and line_pool.search(cr, uid, [('operation_id', '=', ids[0])]) or False
if line_ids:
line_pool.unlink(cr, uid, line_ids)
invoice_ids = self.pool.get('invoice.trx').search(cr, uid, [('partner_id','=', partner_id)])
for p in self.pool.get('invoice.trx').browse(cr, uid, invoice_ids):
rs = {
'partner_id': p.partner_id.id,
'sold_initial': p.sold_initial,
'sold_open': p.sold_final,
'val_all': False,
'val_trx': 0.0,
'sold_final': p.sold_final,
}
invoice_lines.append((0, 0, rs))
invoice_lines.reverse()
res['value']['line_ids'] = invoice_lines
return res
这个 onchange 方法工作正常。
问题是我无法更改此方法,因此如果父模型中的“total_amount”字段!=0,则将该值拆分为 val_trx 列中的子行。
值的拆分要考虑sold_open的值。例如:total_amount=1000 欧元,我们有 2 张发票,其中 sold_open1= 500 和 sold_open2= 700,而不是 val_trx1=500 和 val_trx2=500。剩余的 200 欧元将在父模型的 amount_adv 字段中更新。
你能帮忙吗?
非常感谢
【问题讨论】:
标签: openerp