Odoo 13 - 使用 Python 创建与网站链接的销售订单

Odoo 13 - Create Sale Order linked with Website using Python

我正在编写一个用于制作销售订单的自定义网站。门户网站用户登录后即可访问该网站。我有一个准备好创建销售订单的控制器,但它无法正常工作。

这是我创建新订单的方式:

    @http.route('/api/create_order', type='json', auth='user', website=True)
    def create_order(self, **kw):
        uid = http.request.env.context.get('uid')
        partner_id = http.request.env['res.users'].search([('id','=',uid)]).partner_id.id
        
        order_products = kw.get('order_products', [])
        order_line = []

        for product in order_products:
            order_line.append(
                (0, 0, {
                    'product_id': http.request.env['product.product'].search([('product_tmpl_id','=',product['product_id'])])[0].id,
                    'product_uom_qty': product['amount'],
                }))

        order_data = {
            'name': 'Test Sale Order',
            'partner_id': partner_id,
            'order_line': order_line,
        }

        result_insert_record = http.request.env['sale.order'].with_user(SUPERUSER_ID).create(order_data)
        return result_insert_record

如您所见,我正在使用 with_user(SUPERUSER_ID).create()。因为门户用户没有直接创建销售订单的权限。当我使用 sudo().create() 时,此门户用户也被指定为销售员(以及客户)来处理他自己的订单。

他也没有在他的网站帐户中看到它们 - 他应该看到。创建此类订单后,他还应该会收到一封确认电子邮件。

当有人通过网站内的商店下订单时,没有分配销售人员,而是有一个与该销售订单链接的网站。

那么我该如何创建这个销售订单,以便它与网站链接,用户可以在他的门户中看到它并在创建后收到一封电子邮件?我是否需要传递一些特殊参数或使用不同的功能?

事实证明,不需要 link 使用网站发送销售订单。

首先,您必须确保门户用户拥有正确的访问权限。如果没有安装电子商务模块,默认情况下门户用户将无法访问例如产品。您需要编写自己的访问权限或安装 website_sale 模块。

此外,用户将无法看到处于 Draft 状态的订单。发送或确认都会让用户在他们的文档中看到它们。

最后,如果您愿意,可以通过设置 website_id 字段 link 向网站订购:

order_data = {
    ...
    'website_id': http.request.website.id,
}

result_insert_record = http.request.env['sale.order'].with_user(SUPERUSER_ID).create(order_data)

但在这个问题的上下文中并不重要。