2016-07-25 62 views
0

在openerp 7中stock_picking分为两个项目stock_picking_in和stock_picking_out,现在他们创建了一个包含两个项目的项目,并且存在一个包含类型(输入或输出)的字段。我希望对“in”项目具有普通视图,对“out”具有完全自定义视图。这是可能的和如何?谢谢。如何区分odoo中的选股8

我picking.py继承stock.picking并添加一些字段。我想 picking_in_view使用stock.picking默认显示为表格视图和树视图和我想改变显示为picking_out_view。问题是,当我更改picking_out_view中的显示时,它也会在picking_in_view中更改,因为它会更改模型。

而最大的问题是,我需要改变多个领域与stock.move out item,但如果我这样做,我需要修改模型,它为进出。

有没有办法做到这一点?

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_facture 

picking_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> 

回答

1

一种实现方法是使用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> 
+0

我试着创建两个不同的菜单项和两个不同的动作,但是当我修改一个表单视图时,它修改了父模型,因此另一个采用相同的外观,是否有办法修改表单视图? – Zada1100

+0

与我给你的解决方案,你可以创建两个不同的形式和两个不同的树,并在两个不同的行动中使用它们,没有任何问题,如果你有一些具体的问题,我必须看到一个代码 –

+0

我添加了更多关于我的问题的信息如果你想看看,我添加了我的代码。 – Zada1100