python - Odoo - 确认销售订单
问题描述
您好我正在使用 Odoo10 并尝试在 POS 中创建销售订单,下面的代码创建销售订单报价单。我想确认销售并创建销售订单而不是报价单。
@api.model
def create_sales_order(self, orderline, customer_id, sign):
sale_pool = self.env['sale.order']
prod_pool = self.env['product.product']
sale_line_pool = self.env['sale.order.line']
sale_no = ''
sale = {}
if customer_id:
customer_id = int(customer_id)
sale = {'partner_id': customer_id,
'partner_invoice_id': customer_id,
'partner_shipping_id': customer_id,
'signature': sign}
sale_id = sale_pool.create(sale)
if sale_id:
sale_brw = sale_id
sale_brw.onchange_partner_id()
#create sale order line
for line in orderline:
sale_line = {}
if line.get('product_id'):
prod_rec = prod_pool.browse(line['product_id'])
sale_line.update({'name': prod_rec.name or False,
'product_id': prod_rec.id,
'product_uom_qty': line['qty'],
'discount': line.get('discount'),
'order_id': sale_id.id})
sale_line_id = sale_line_pool.create(sale_line)
for line in sale_line_id:
line.product_id_change()
return {"name": sale_brw.name, "id": sale_brw.id }
如何创建销售订单而不是报价单?
解决方案
简短回答:设置state
为"sale"
:
sale = {'partner_id': customer_id,
'partner_invoice_id': customer_id,
'partner_shipping_id': customer_id,
'signature': sign,
'state': 'sale'}
销售订单和报价保存在同一模型上(即sale.order
),您可以通过查看它来判断它是 SO 还是报价state
:
状态 | 意义 --------|-------- 草稿| 引述 已发送 | 报价已发送 出售| 销售订单 完成 | 锁定 取消 | 取消
此外,您可以查看通过单击文件上的“确认销售”按钮action_confirm
触发的功能:addons/sale/models/sale.py
445 def action_done(self):
446 return self.write({'state': 'done'})
...
451 @api.multi
452 def action_confirm(self):
453 for order in self:
454 order.state = 'sale'
455 order.confirmation_date = fields.Datetime.now()
456 if self.env.context.get('send_email'):
457 self.force_quotation_send()
458 order.order_line._action_procurement_create()
459 if self.env['ir.values'].get_default('sale.config.settings', 'auto_done_setting'):
460 self.action_done()
461 return True
推荐阅读
- sql - SQL 子字符串 REGEX 模式匹配 (TERADATA)
- c# - 复杂属性的部分服务器端验证
- android - 未在 Android Virtual Device Emulator API 30 上找到测试(UI 测试)
- python - 将包含字典的 pandas 数据框行拆分为多行
- r - 如何在 R 的数据表中创建新变量时引用当前行
- firebase - 如何阅读 Firestore 收藏?
- api - 修改 Scilab 6 网关功能中的 Scilab/Xcos 模块
- c - 在树莓派上链接文件并遇到问题
- c++ - 如果我的桌面应用程序使用 MySQL,我的客户是否必须单独安装 MySQL?
- ios - 如何消除 animateKeyframes 动画开始和结束的延迟 - Swift UIKit