python - 从odoo的订单行获取产品价格?
问题描述
我已经从 Odoo 商店安装了一个自定义模块,该模块会自动为退回的产品创建信用票据,但该模块从产品表单中获取价格,其中可能不包括订单价格。
我需要更改要从订单行计算的每行价格的值,即使它正在销售或购买。
这是创建方法:
@api.multi
def create_refund_invoice(self):
inv_obj = self.env['account.invoice']
for pick in self.filtered(lambda x:x.return_type):
type = 'in_refund' if pick.return_type == 'purchase' else 'out_refund'
inv_lines = {'type':type, 'partner_id':pick.partner_id.id, 'invoice_line_ids':[]}
account = pick.return_type == 'sale' and pick.partner_id.property_account_receivable_id.id or pick.partner_id.property_account_payable_id.id
inv_lines['account_id'] = account
inv_lines['origin'] = pick.name
inv_lines['name'] = pick.origin
for line in pick.move_lines:
name = line.product_id.partner_ref
pricelist_id = pick.partner_id.property_product_pricelist
price = pricelist_id.get_product_price(line.product_id, 1, pick.partner_id) if pricelist_id else line.product_id.lst_price
inv_lines['invoice_line_ids'] += [(0, None, {'product_id':line.product_id.id,
'name':name,
'quantity':line.quantity_done,
'price_unit': price,
'account_id':line.product_id.product_tmpl_id.get_product_accounts()['income'].id})]
if inv_lines['invoice_line_ids']:
inv_id = inv_obj.create(inv_lines)
pick.invoice_id = inv_id.id
我应该怎么办 ?我试图设置
price = line.env['purchase.order'].search([('name','=',line.group_id)]).order_line.price_unit
但它使价格= 0
任何帮助将不胜感激。
我成功了,但它只得到一条记录,如果有不止一条记录,我会出错
raise ValueError("Expected singleton: %s" % self) ValueError: Expected singleton: purchase.order.line(11362, 11363)
这是新方法
@api.multi
def create_refund_invoice(self):
inv_obj = self.env['account.invoice']
for pick in self.filtered(lambda x:x.return_type):
type = 'in_refund' if pick.return_type == 'purchase' else 'out_refund'
inv_lines = {'type':type, 'partner_id':pick.partner_id.id, 'invoice_line_ids':[]}
account = pick.return_type == 'sale' and pick.partner_id.property_account_receivable_id.id or pick.partner_id.property_account_payable_id.id
inv_lines['account_id'] = account
inv_lines['origin'] = pick.name
inv_lines['name'] = pick.origin
for line in pick.move_lines:
name = line.product_id.partner_ref
order_id = line.env['purchase.order'].search([('name', '=', line.origin)]).order_line
price = order_id.price_unit
inv_lines['invoice_line_ids'] += [(0, None, {
'product_id':line.product_id.id,
'name':name,
'quantity':line.quantity_done,
'price_unit': price,
'account_id':line.product_id.product_tmpl_id.get_product_accounts()['income'].id})]
if inv_lines['invoice_line_ids']:
inv_id = inv_obj.create(inv_lines)
pick.invoice_id = inv_id.id
解决方案
您必须0,0
在创建 One2Many 字段的值时通过。
用您的代码替换下面的代码。它可能会解决您的问题。
def create_refund_invoice(self):
inv_obj = self.env['account.invoice']
for pick in self.filtered(lambda x:x.return_type):
type = 'in_refund' if pick.return_type == 'purchase' else 'out_refund'
inv_lines = {'type':type, 'partner_id':pick.partner_id.id, 'invoice_line_ids':[]}
account = pick.return_type == 'sale' and pick.partner_id.property_account_receivable_id.id or pick.partner_id.property_account_payable_id.id
inv_lines['account_id'] = account
inv_lines['origin'] = pick.name
inv_lines['name'] = pick.origin
line_vals = []
for line in pick.move_lines:
name = line.product_id.partner_ref
pricelist_id = pick.partner_id.property_product_pricelist
price = pricelist_id.get_product_price(line.product_id, 1, pick.partner_id) if pricelist_id else line.product_id.lst_price
inv_id = inv_obj.search([('origin', '=', pick.name)], limit=1)
if not inv_id:
inv_id = inv_obj.create(inv_lines)
line_vals.append({
'product_id':line.product_id.id,
'name':name,
'quantity':line.quantity_done,
'price_unit': price,
'account_id':line.product_id.product_tmpl_id.get_product_accounts()['income'].id,
'invoice_id': inv_id.id
})
inv_id.invoice_line_ids.create(line_vals)
推荐阅读
- javascript - 将 AES 加密消息从 js Crypto 传递到 ESP8266 时出现填充问题
- selenium - 如何让 Selenium 驱动程序与 G1ANT / Windows 7 一起工作?
- excel - 宏正在打开一个模板而不是创建一个新模板
- javascript - 使用键盘快捷键激活/启动 google chrome 扩展
- c# - MVC JsonResult 有数据,但浏览器没有
- javascript - 在 JavaScript 花括号中返回一个对象导致错误
- codenameone - 在代号一中自动裁剪图像
- javascript - react-native 使用三元运算符动态改变视图高度
- ios - 为什么单元格没有根据其内容调整大小?
- sublimetext3 - 去除烦人的空白点