在 Odoo 中实现产品打包组合销售的步骤
1. 扩展产品模块
在产品模块中增加一个新的布尔字段,用于标识产品是否是组合产品。
from odoo import models, fields
class ProductProduct(models.Model):
_inherit = 'product.product'
is_bundle = fields.Boolean(string='Is Bundle')
2. 创建组合明细模型
创建一个新的模型来存储组合产品的明细。
class ProductBundle(models.Model):
_name = 'product.bundle'
product_id = fields.Many2one('product.product', string='Product', required=True)
bundle_product_id = fields.Many2one('product.product', string='Bundle Product', required=True)
quantity = fields.Float(string='Quantity', required=True)
3. 添加选项卡到产品表单
在产品表单中添加一个新的选项卡,用于设置组合明细。
<record id="product_product_form_view_bundle" model="ir.ui.view">
<field name="name">product.product.form.bundle</field>
<field name="model">product.product</field>
<field name="inherit_id" ref="product.product_form_view"/>
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Bundle Products" groups="base.group_user">
<field name="is_bundle"/>
<group attrs="{'invisible': [('is_bundle', '=', False)]}">
<field name="product_bundle_ids" widget="one2many_list">
<tree>
<field name="product_id"/>
<field name="quantity"/>
</tree>
</field>
</group>
</page>
</xpath>
</field>
</record>
4. 处理销售订单
在销售订单中处理组合产品的逻辑。
from odoo import models, fields, api
class SaleOrderLine(models.Model):
_inherit = 'sale.order.line'
@api.onchange('product_id')
def product_id_change(self):
if self.product_id.is_bundle:
# 处理组合产品的逻辑
pass
5. 发货处理
在发货时根据设置决定是发整个产品包还是包内产品的明细。
class StockMove(models.Model):
_inherit = 'stock.move'
@api.model
def create(self, vals):
if vals.get('product_id'):
product = self.env['product.product'].browse(vals['product_id'])
if product.is_bundle:
# 处理组合产品的发货逻辑
pass
return super(StockMove, self).create(vals)

通过以上步骤,您可以实现产品打包组合销售的功能。在销售订单中,组合产品可以像普通产品一样进行销售,并且在发货时可以根据设置决定是发整个产品包还是包内产品的明细。


