将我的代码添加到原始方法的更实用的方法
More practical way to add my code to original method
所以我重写了 _prepare_invoice_line_from_po_line
方法。我对得到的结果很满意,但我想让代码更优雅。基本上,它是从原始方法复制过来的,但我只添加了其中的一小部分(您可以在下面查看)。如何在没有 copy/past 所有原始方法的情况下将我的代码添加到此方法?
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
price_by_pricelist = fields.Float("Price by Pricelist")
line_color = fields.Boolean()
@api.multi
def _prepare_invoice_line_from_po_line(self, line):
super(AccountInvoice,self)._prepare_invoice_line_from_po_line(line)
if line.product_id.purchase_method == 'purchase':
qty = line.product_qty - line.qty_invoiced
else:
qty = line.qty_received - line.qty_invoiced
if float_compare(qty, 0.0, precision_rounding=line.product_uom.rounding) <= 0:
qty = 0.0
taxes = line.taxes_id
invoice_line_tax_ids = self.purchase_id.fiscal_position_id.map_tax(taxes)
invoice_line = self.env['account.invoice.line']
data = {
'purchase_line_id': line.id,
'name': line.name,
'origin': self.purchase_id.origin,
'uom_id': line.product_uom.id,
'product_id': line.product_id.id,
'account_id': invoice_line.with_context({'journal_id': self.journal_id.id, 'type': 'in_invoice'})._default_account(),
'price_unit': line.order_id.currency_id.compute(line.price_unit, self.currency_id, round=False),
'quantity': qty,
'discount': 0.0,
'account_analytic_id': line.account_analytic_id.id,
'invoice_line_tax_ids': invoice_line_tax_ids.ids,
'price_by_pricelist': line.product_id.seller_ids[0].price,
}
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
account = invoice_line.get_invoice_line_account('in_invoice', line.product_id, self.purchase_id.fiscal_position_id, self.env.user.company_id)
if account:
data['account_id'] = account.id
return data
我的部分
'price_by_pricelist': line.product_id.seller_ids[0].price,
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
像这样应该可以解决问题。
data = super(AccountInvoice,self)._prepare_invoice_line_from_po_line(line)
data.update({'price_by_pricelist': line.product_id.seller_ids[0].price}) # update the dictionary
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
return data
步骤:
- 调用 super() 以 return 来自原始函数的数据
- 用你想要的数据更新字典
- 做你的数据操作,你有什么
- return数据
希望这对您有所帮助:)
所以我重写了 _prepare_invoice_line_from_po_line
方法。我对得到的结果很满意,但我想让代码更优雅。基本上,它是从原始方法复制过来的,但我只添加了其中的一小部分(您可以在下面查看)。如何在没有 copy/past 所有原始方法的情况下将我的代码添加到此方法?
class AccountInvoice(models.Model):
_inherit = 'account.invoice'
price_by_pricelist = fields.Float("Price by Pricelist")
line_color = fields.Boolean()
@api.multi
def _prepare_invoice_line_from_po_line(self, line):
super(AccountInvoice,self)._prepare_invoice_line_from_po_line(line)
if line.product_id.purchase_method == 'purchase':
qty = line.product_qty - line.qty_invoiced
else:
qty = line.qty_received - line.qty_invoiced
if float_compare(qty, 0.0, precision_rounding=line.product_uom.rounding) <= 0:
qty = 0.0
taxes = line.taxes_id
invoice_line_tax_ids = self.purchase_id.fiscal_position_id.map_tax(taxes)
invoice_line = self.env['account.invoice.line']
data = {
'purchase_line_id': line.id,
'name': line.name,
'origin': self.purchase_id.origin,
'uom_id': line.product_uom.id,
'product_id': line.product_id.id,
'account_id': invoice_line.with_context({'journal_id': self.journal_id.id, 'type': 'in_invoice'})._default_account(),
'price_unit': line.order_id.currency_id.compute(line.price_unit, self.currency_id, round=False),
'quantity': qty,
'discount': 0.0,
'account_analytic_id': line.account_analytic_id.id,
'invoice_line_tax_ids': invoice_line_tax_ids.ids,
'price_by_pricelist': line.product_id.seller_ids[0].price,
}
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
account = invoice_line.get_invoice_line_account('in_invoice', line.product_id, self.purchase_id.fiscal_position_id, self.env.user.company_id)
if account:
data['account_id'] = account.id
return data
我的部分
'price_by_pricelist': line.product_id.seller_ids[0].price,
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
像这样应该可以解决问题。
data = super(AccountInvoice,self)._prepare_invoice_line_from_po_line(line)
data.update({'price_by_pricelist': line.product_id.seller_ids[0].price}) # update the dictionary
if data['price_by_pricelist'] != line.price_unit:
self.line_color = True
return data
步骤:
- 调用 super() 以 return 来自原始函数的数据
- 用你想要的数据更新字典
- 做你的数据操作,你有什么
- return数据
希望这对您有所帮助:)