在openerp 7中,stock_picking被分隔为两个项,stock_picking_in和stock_picking_out,现在他们创建了一个包含这两个项的项,并且有一个字段包含类型(in或out)。我想拥有"in“项的正常视图和"out”的完全自定义视图。有可能吗?怎么做?谢谢。
我的picking.py继承了stock.picking并添加了一些字段。我希望picking_in_view对窗体视图和树视图使用stock.picking默认显示,并且要更改picking_out_view.的显示。问题是,当我更改picking_out_view中的显示时,它也更改了picking_in_view,因为它改变了模型。
最大的问题是,我需要用stock.move为out条目将多个字段更改为多个字段,但如果这样做,我需要修改模型,而它则用于输入和输出。
有办法吗?
move.py
# -*- coding: utf-8 -*-
from openerp import models, fields, api, tools
from openerp.exceptions import ValidationError
class StockMove(models.Model):
"""
Ajout de champs dans la ligne de commande, et quelques fonctions
telles que unpack
"""
_inherit = "stock.move"
# Le code du produit à afficher
product_code = fields.Char(string="Product", store=True, related="product_id.default_code")
# Le lien vers la ligne d'achat sale.order.line
sale_line_id = fields.Many2one(string="SaleOrderLine", store=True, related="procurement_id.sale_line_id")
# Le colis associé à la commande
stock_quant_package = fields.Many2one('stock.quant.package', string='Pack')
# Sert à savoir si on affiche l'icône rouge pour déballer un colis
show_unpack = fields.Boolean(store=False, compute='compute_show_unpack')
# Sert à savoir si on affiche l'icône d'impression validée
is_printed = fields.Boolean(store=False, compute='compute_printed')
# Pour colorer les lignes, condition
statut_ok = fields.Boolean(default=False, store=False, compute="compute_statut_ok")
# Le statut de la commande
statut_id = fields.Many2one('sale.statut', string='Statut', default=lambda self: self._default_statut_id())
date_emballage = fields.Datetime("Date d'emballage")
# Champs non enregistrés en BD, utilisés pour l'affichage
metal = fields.Many2one('product.finition',string="Metal", store=False, related="procurement_id.sale_line_id.metal")
bois1 = fields.Many2one('product.finition',string="Bois 1", store=False, related="procurement_id.sale_line_id.bois1")
bois2 = fields.Many2one('product.finition',string="Bois 2", store=False, related="procurement_id.sale_line_id.bois2")
verre = fields.Many2one('product.finition',string="Verre", store=False, related="procurement_id.sale_line_id.verre")
tissu = fields.Many2one('product.finition',string="Tissu", store=False, related="procurement_id.sale_line_id.tissu")
patte = fields.Many2one('product.finition',string="Patte", store=False, related="procurement_id.sale_line_id.patte")
config = fields.Char(string="Config", store=False, size=64, related="procurement_id.sale_line_id.config")
poignee = fields.Many2one('product.finition',string="Poignee", store=False, related="procurement_id.sale_line_id.poignee")
# Le prix d'une ligne de commande, calculé
move_price = fields.Float(string="Prix", store=False, compute="compute_move_price")
# Pour differencier les formulaires
is_picking_out = fields.Boolean(store=False, compute="compute_is_picking_out")
...picking.py
# -*- coding: utf-8 -*-
from openerp import models, fields, api, tools
class StockPicking(models.Model):
_inherit = "stock.picking"
# Le statut
statut_id = fields.Many2one("sale.statut", string="Statut")
# Erreur inconnue sur l'inexistence de ce champ; à laisser
stock_journal_id = fields.Integer()
carrier_id = fields.Many2one("stock.carrier", compute="_carrier_info")
num_compte_transport = fields.Char(string="Numéro de compte UPS", compute="_carrier_info")
@api.multi
def _carrier_info(self):
for line in self:
line.carrier_id = self.sale_id.carrier_transport
line.num_compte_transport = self.sale_id.num_compte_facturepicking_in_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- On cache un attribut de la liste des bons de livraison -->
<record id="stock_picking_tree_view_cr" model="ir.ui.view">
<field name="name">stock.picking.tree.inherit.cr</field>
<field name="model">stock.picking</field>
<field name="priority" eval="2"/>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='location_dest_id']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>
<!-- Les boutons de modification de la commande de base par Odoo dans le formulaire -->
<!-- Des bons de livraison -->
<record id="stock_picking_form_view_cr" model="ir.ui.view">
<field name="name">stock.picking.form.inherit.cr</field>
<field name="model">stock.picking</field>
<field name="priority" eval="2"/>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//form/header/button[@name='action_assign']" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
<xpath expr="//form/header/button[@name='force_assign']" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
<xpath expr="//form/header/button[@name='action_cancel']" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
</field>
</record>
<!-- - - - - - - - - - - - - ACTIONS - - - - - - - - - - - - -->
<!-- L'action du bouton dans le menu lateral -->
<record id="picking_in_action_createch" model="ir.actions.act_window">
<field name="name">Bons de réception</field>
<field name="res_model">stock.picking</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">
[('picking_type_id','=',1)]
</field>
</record>
<!-- - - - - - - - - - - - - MENUS - - - - - - - - - - - - -->
<!-- Le premier bouton dans la barre laterale -->
<menuitem id="picking_orders_menu" name="Bons de réception"
sequence="0"
parent="warehouse_mgt_cr"
action="picking_in_action_createch"/>
</data>
</openerp>picking_out_view.xml
<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
<!-- Liste des colis -->
<record id="stock_quant_package_tree_view" model="ir.ui.view">
<field name="name">stock.quant.package.tree.cr</field>
<field name="model">stock.quant.package</field>
<field name="priority" eval="2"/>
<field name="arch" type="xml">
<tree string="Paquets">
<field name="name"/>
<field name="order_name"/>
<field name="item"/>
<field name="owner_name"/>
<field name="create_date"/>
<field name="prix" sum="Total Amount"/>
</tree>
</field>
</record>
<!-- On cache un attribut de la liste des bons de livraison -->
<record id="stock_picking_tree_view_cr" model="ir.ui.view">
<field name="name">stock.picking.tree.inherit.cr</field>
<field name="model">stock.picking</field>
<field name="priority" eval="2"/>
<field name="inherit_id" ref="stock.vpicktree"/>
<field name="arch" type="xml">
<xpath expr="//tree/field[@name='location_dest_id']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>
<!-- Les boutons de modification de la commande de base par Odoo dans le formulaire -->
<!-- Des bons de livraison -->
<record id="stock_picking_form_view_cr" model="ir.ui.view">
<field name="name">stock.picking.form.inherit.cr</field>
<field name="model">stock.picking</field>
<field name="priority" eval="2"/>
<field name="inherit_id" ref="stock.view_picking_form"/>
<field name="arch" type="xml">
<xpath expr="//form/header/button[@name='action_assign']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//form/header/button[@name='force_assign']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
<xpath expr="//form/header/button[@name='action_cancel']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath>
</field>
</record>
<!-- - - - - - - - - - - - - ACTIONS - - - - - - - - - - - - -->
<!-- L'action du bouton dans le menu lateral -->
<record id="picking_action_createch" model="ir.actions.act_window">
<field name="name">Bons de livraison</field>
<field name="res_model">stock.picking</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">
[('picking_type_id','=',2)]
</field>
<field name="context">{"search_default_filter_a_emballer":1}</field>
</record>
<!-- Un autre bouton dans la barre laterale. Sert de test actuellement -->
<record id="stock_quant_package_action_createch" model="ir.actions.act_window">
<field name="name">Colis</field>
<field name="res_model">stock.quant.package</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<!-- - - - - - - - - - - - - MENUS - - - - - - - - - - - - -->
<!-- Le titre dans la barre laterale -->
<menuitem id="warehouse_mgt_cr" name="Warehouse Management"
sequence="0"
parent="stock.menu_stock_root"/>
<!-- Le premier bouton dans la barre laterale -->
<menuitem id="delivery_orders_menu" name="Bons de livraison"
sequence="1"
parent="warehouse_mgt_cr"
action="picking_action_createch"/>
<menuitem id="quant_package_colis_menu" name="Colis"
sequence="3"
parent="warehouse_mgt_cr"
action="stock_quant_package_action_createch"/>
</data>
</openerp>发布于 2016-07-26 06:37:58
实现的一种方法是使用attrs并基于选择类型隐藏或显示字段,如果您想做一些小的更改,对于整个文档来说,这不是最好的解决方案。
第二种方法是为它们创建不同的视图,但只有当您使用不同的菜单项来打开这个对象时,在菜单项上附加的操作中,您可以通过id指定窗体和树视图,如下面的示例:
<record id="action_id" model="ir.actions.act_window">
<field name="name">Action</field>
<field name="res_model">model.name</field>
<field name="type">ir.actions.act_window</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
</record>
<record model="ir.actions.act_window.view" id="action_id_tree">
<field name="sequence" eval="5"/>
<field name="view_mode">tree_sent_grievances</field>
<field name="view_id" ref="tree_view_id"/>
<field name="act_window_id" ref="action_id"/>
</record>
<record model="ir.actions.act_window.view" id="action_id_form">
<field name="sequence" eval="5"/>
<field name="view_mode">form</field>
<field name="view_id" ref="form_view_id"/>
<field name="act_window_id" ref="action_id"/>
</record>https://stackoverflow.com/questions/38571757
复制相似问题