OpenERP-v7:将自定义字段添加到销售订单的交货订单
OpenERP-v7: Add custom field to delivery order from sale order
我在 sale_order 表单中添加了一个自定义字段,现在我希望它显示在确认销售订单后生成的相应交货订单上。在 v8 中可能有更简单的方法,但我必须在 v7 中这样做,所以请只回答在 OpenERP v7 中有效的答案。
在尝试了许多其他方法来完成此操作后,我在 odoo.com 上发现有人建议您应该尝试重写“_prepare_order_picking”函数,因为它实际创建了交付通过返回要在交货单上显示的值的字典,从销售订单中的值进行排序。我已经获取了 link 提供的代码,但它对我不起作用。这里是link。非常感谢任何帮助,我已尝试将所有内容弄清楚,但如果我需要澄清任何内容,请告诉我,我将编辑我的问题。
我修改了我的代码以使其更易于阅读,并将我需要从销售订单中获取的自定义字段的数量限制为一个字段,实际工作时我需要多个字段,但它应该是正确实施后易于扩展。
我修改后的代码如下:
__openerp__.py:
{
"name" : "Nick's Sale order/delivery order form fields",
"version" : "1.0",
"author" : "Nick",
"category" : "Custom",
"depends" : ['sale', 'stock'],
"description" : """ Sale and delivery order customizations by Nick """,
'data' : ['nicks_sale_fields.xml', 'nicks_delivery_fields.xml'],
'installable' : True,
}
nicks_sale_fields.py:
from openerp.osv import fields,osv
class nicks_sale_fields(osv.Model):
_inherit='sale.order'
def _prepare_order_picking(self, cr, uid, order, context=None):
vals=super(sale_order, self)._prepare_order_picking(cr, uid, order, context=context)
vals.update({'my_custom_field': 'my_custom_field_value'})
return vals
_columns={
'my_custom_field': fields.char('field description', required=True, store=True, size=3, help='field help text',),
}
_defaults={
'my_custom_field': 'yes'
}
nicks_sale_fields.xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_sale_order_fields">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook/page[1]/group" position="after">
<group string="Sales order: custom fields">
<field name="my_custom_field" string="Sale form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
nicks_delivery_fields.xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_deliv_order_fields">
<field name="name">stock.picking.out.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="stock.view_picking_out_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
<group string="Delivery order: custom fields">
<field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
您需要在__openerp__.py
文件中添加sale_stock
(依赖销售和库存)模块的依赖。喜欢
"depends" : ['sale_stock'],
并且在nicks_delivery_fields.xml
中您输入了错误的模型名称来修改交货单视图。应该是 stock.picking
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_deliv_order_fields">
<field name="name">stock.picking.out.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
<group string="Delivery order: custom fields">
<field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
假设您只想让自定义销售订单字段在交付时可供阅读,您可以使用 related
计算字段:
class StockPicking(osv.Model):
_inherit='stock.picking'
_columns={
'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
感谢这里所有人的帮助,我得以解决我的问题,@daniel-reis 正确说明了如何使用相关字段,效果很好。让我的模块依赖于 __openerp__.py 文件中的 'sale_stock' 也有帮助,所以感谢 @atul-arvind。在这没有完全奏效之后,我不得不进一步挖掘,发现由于 stock.picking.out 模型继承自 stock.picking 的方式(在 v7 中,我认为这在 v8 中已修复)它是有必要创建两个自定义 类,一个继承自 stock.picking,一个继承自 stock.picking.out。然后在每个 类 中定义您的自定义字段,然后它们就会显示出来并且继承将正常工作,如下所示:
class stock_picking_out(osv.Model):
_name = 'stock.picking.out'
_inherit = 'stock.picking.out'
_columns = { 'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
class stock_picking(osv.Model):
_name = 'stock.picking'
_inherit = 'stock.picking'
_columns = { 'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
然后,在我的 xml 文件中,我将模型行更改为:
<field name="model">stock.picking.out</field>
从这里一切正常,我的销售订单中的自定义字段存储在数据库 table sale_order 中,并正确显示在交货订单字段中。
如有任何关于此的问题,请随时与我联系post,我会尽力解答。
我在 sale_order 表单中添加了一个自定义字段,现在我希望它显示在确认销售订单后生成的相应交货订单上。在 v8 中可能有更简单的方法,但我必须在 v7 中这样做,所以请只回答在 OpenERP v7 中有效的答案。
在尝试了许多其他方法来完成此操作后,我在 odoo.com 上发现有人建议您应该尝试重写“_prepare_order_picking”函数,因为它实际创建了交付通过返回要在交货单上显示的值的字典,从销售订单中的值进行排序。我已经获取了 link 提供的代码,但它对我不起作用。这里是link。非常感谢任何帮助,我已尝试将所有内容弄清楚,但如果我需要澄清任何内容,请告诉我,我将编辑我的问题。
我修改了我的代码以使其更易于阅读,并将我需要从销售订单中获取的自定义字段的数量限制为一个字段,实际工作时我需要多个字段,但它应该是正确实施后易于扩展。
我修改后的代码如下:
__openerp__.py:
{
"name" : "Nick's Sale order/delivery order form fields",
"version" : "1.0",
"author" : "Nick",
"category" : "Custom",
"depends" : ['sale', 'stock'],
"description" : """ Sale and delivery order customizations by Nick """,
'data' : ['nicks_sale_fields.xml', 'nicks_delivery_fields.xml'],
'installable' : True,
}
nicks_sale_fields.py:
from openerp.osv import fields,osv
class nicks_sale_fields(osv.Model):
_inherit='sale.order'
def _prepare_order_picking(self, cr, uid, order, context=None):
vals=super(sale_order, self)._prepare_order_picking(cr, uid, order, context=context)
vals.update({'my_custom_field': 'my_custom_field_value'})
return vals
_columns={
'my_custom_field': fields.char('field description', required=True, store=True, size=3, help='field help text',),
}
_defaults={
'my_custom_field': 'yes'
}
nicks_sale_fields.xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_sale_order_fields">
<field name="name">sale.order.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/notebook/page[1]/group" position="after">
<group string="Sales order: custom fields">
<field name="my_custom_field" string="Sale form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
nicks_delivery_fields.xml:
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_deliv_order_fields">
<field name="name">stock.picking.out.form</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="stock.view_picking_out_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
<group string="Delivery order: custom fields">
<field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
您需要在__openerp__.py
文件中添加sale_stock
(依赖销售和库存)模块的依赖。喜欢
"depends" : ['sale_stock'],
并且在nicks_delivery_fields.xml
中您输入了错误的模型名称来修改交货单视图。应该是 stock.picking
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<record model="ir.ui.view" id="nicks_deliv_order_fields">
<field name="name">stock.picking.out.form</field>
<field name="model">stock.picking</field>
<field name="inherit_id" ref="stock.view_picking_out_form"/>
<field name="arch" type="xml">
<xpath expr="/form/sheet/group/group[2]/field[@name='origin']" position="after">
<group string="Delivery order: custom fields">
<field name="my_custom_field" string="Delivery form descriptor" class="oe_inline"/>
</group>
</xpath>
</field>
</record>
</data>
</openerp>
假设您只想让自定义销售订单字段在交付时可供阅读,您可以使用 related
计算字段:
class StockPicking(osv.Model):
_inherit='stock.picking'
_columns={
'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
感谢这里所有人的帮助,我得以解决我的问题,@daniel-reis 正确说明了如何使用相关字段,效果很好。让我的模块依赖于 __openerp__.py 文件中的 'sale_stock' 也有帮助,所以感谢 @atul-arvind。在这没有完全奏效之后,我不得不进一步挖掘,发现由于 stock.picking.out 模型继承自 stock.picking 的方式(在 v7 中,我认为这在 v8 中已修复)它是有必要创建两个自定义 类,一个继承自 stock.picking,一个继承自 stock.picking.out。然后在每个 类 中定义您的自定义字段,然后它们就会显示出来并且继承将正常工作,如下所示:
class stock_picking_out(osv.Model):
_name = 'stock.picking.out'
_inherit = 'stock.picking.out'
_columns = { 'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
class stock_picking(osv.Model):
_name = 'stock.picking'
_inherit = 'stock.picking'
_columns = { 'my_custom_field': fields.related(
'sale_id', 'my_custom_field', type='char',
readonly=True, string='field description'),
}
然后,在我的 xml 文件中,我将模型行更改为:
<field name="model">stock.picking.out</field>
从这里一切正常,我的销售订单中的自定义字段存储在数据库 table sale_order 中,并正确显示在交货订单字段中。
如有任何关于此的问题,请随时与我联系post,我会尽力解答。