Getting value in openERP Edit form view - odoo

I have selection field in the form
<field name="company_id" groups="base.group_multi_company" widget="selection"/>
I have to pass the value selected in the selection field in domain filter as company_id in below
<tree string="Components" editable="bottom">
<field name="product_id" context="{'default_supply_method':'produce'}" on_change="onchange_product_id(product_id, name)" domain="[('company_id','=',**company_id**),('stage','=','confirmed')]" />
</tree>
Now , I need to pass value of field with name company_id into the domain with field product_id
Help me on this.

To get the value of the field 'company_id' that is saved on form view, you need to add this field on your tree view definition and if you don't need to see it on tree view, put invisible="1" in xml definition.
<tree string="Components" editable="botton">
<field name="company_id" invisible="1" />
<field name="product_id" context="{'default_supply_method':'produce'}" on_change="onchange_product_id(product_id, name)" domain="[('company_id','=',**company_id**),('stage','=','confirmed')]" />
</tree>

Related

Show list of available product fields for Inventory Adjustments (to find the barcode field)

I would like to add the barcode of my products to the product list in the inventory list in the inventory adjustments. The view list is:
<?xml version="1.0"?>
<tree editable="top" string="Inventory Details" decoration-info="product_qty != theoretical_qty" decoration-danger="theoretical_qty < 0">
<field name="product_id" domain="[('type','=','product')]"/>
<field name="product_uom_id" string="UoM" groups="product.group_uom"/>
<field name="location_id" domain="[('id', 'child_of', inventory_location_id)]" groups="stock.group_stock_multi_locations"/>
<field name="prod_lot_id" domain="[('product_id', '=', product_id)]" context="{'default_product_id': product_id}" groups="stock.group_production_lot"/>
<field name="package_id" domain="['|', ('location_id','=', False), ('location_id', '=', location_id)]" groups="stock.group_tracking_lot"/>
<field name="partner_id" groups="stock.group_tracking_owner"/>
<field name="theoretical_qty" readonly="1"/>
<field name="product_qty" string="Real Quantity"/>
<field name="state" invisible="1"/>
<field name="inventory_id" invisible="1"/>
<field name="inventory_location_id" invisible="1"/>
</tree>
If I try to add the field <field name="product_id.barcode" /> I am told that:
Field product_id.barcode does not exist
How to see all the fields that are possible to add in this list?
Seems like you can't go throughout models in XML views.
You can add a related field to the model you're displaying in this view basically like that : barcode = fields.Char(related='product_id.barcode') then you can show it in your view like this : <field name="barcode"/>.

Odoo: Display a field in tree view depending on value of another field in the model

I have a tree view in which I want to display a column depending on the value of another field. To be specific, in the Inventory app, I want to add a column in the tree view when the picking type is 'Internal Transfers'. I do not want to show the same column in any other picking type.
Please note, I am customizing this in Odoo Enterprise Edition.
I did attrs="{'invisible': [('x_picking_type_name','=', 'Internal Transfers')]}", where x_picking_type_name is a custom field in the model. I am able to hide values in the records but the column remains in other picking types.
I suppose, there is a way around with context but I could not make it work. I will appreciate any help on this.
The XML I am using. I am trying it in original view without inheriting.
<?xml version="1.0"?>
<tree decoration-info="state == 'draft'" decoration-muted="state == 'cancel'" decoration-danger="state not in ('cancel', 'done') and min_date < current_date" string="Picking list">
<field name="name"/>
<field name="location_dest_id"/>
<field name="partner_id"/>
<field name="date" invisible="1"/>
<field name="min_date"/>
<field name="origin"/>
<field name="x_picking_type_name"/>
<field name="check_todo" attrs="{'invisible': [('x_picking_type_name','!=', 'Internal Transfers')]}"/>
<field name="group_id" invisible="1"/>
<field name="backorder_id"/>
<field name="state"/>
<field name="priority" invisible="1"/>
<field name="picking_type_id" invisible="1"/>
<field name="product_id"/>
</tree>
According to this post
https://www.odoo.com/es_ES/forum/ayuda-1/how-to-add-a-field-conditional-to-tree-view-of-customer-14707#answer_198626
`attrs="{'invisible':[('customer','!=',True)]}"`

Odoo 10 - QWeb hide a view element if a field is False

I have following QWeb element:
<record id="extended_res_partner" model="ir.ui.view">
<field name="name">Extended View</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Foo" name="foo" attrs="{'invisible': [('is_customer', '=', False),]}">
<field name="is_customer" invisible="1"/>
<span>Foo2</span>
</page>
</notebook>
</field>
</record>
But it does not work. I get:
Field `is_customer` does not exist
If I remove attrs=... it works fine.
Even that you didn't provide the error message but this will work only if the the form view if for res.partner but i'm assuming that the form is for another model that have a many2one relation with res.partner in this case you need to create a related field in the model.
partner_id = ......
is_customer = fields.Boolean(related='partner_id.is_customer', readonly=True)
Then you need to add this field to the form view because attrs is client side feature it need the value in form in order to work.
<page string="foo" name="foo" attrs="{'invisible': [('is_customer', '=', False),]}">
<field name="is_customer" invisible="1"/>
<span>Foo2</span>
</page>
Note: if the form view is for res.partner just add the field to the form view because as I said is a client side operation it will not call the server to know what is the value of that field you need to pass it.

How to hide fields based on condition in odoo?

I have created few custom fields for products.Products appear in sales,purchase,warehouse and manufacturing module.I want to make my custom fields appear only in manufacturing module and hide everywhere else.So how to put condition on invisible attribute.I tried like this and got error as Unknown field _name in domain
attrs="{'invisible': [('_name', '!=', 'mrp.bom')]}"
Python file,
from openerp import fields,models, api
class product_template(models.Model):
_inherit = "product.template"
rim_weight = fields.Float(string='Rim Weight(KG)', readonly=True, compute='_compute_one_rim_weight')
width = fields.Float(string='Width(cm)',default='50')
length = fields.Float(string='Length(cm)',default='63')
gsm = fields.Float(string='Gram per square meter(gsm)',default='230')
Xml file,
<record id="product_template_form_view_dis_inherit" model="ir.ui.view">
<field name="name">product.template.common.form.dis.inherit</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="product.product_template_form_view"/>
<field name="arch" type="xml">
<xpath expr="//page[#string='Accounting']" position='after'>
<page string='Cover Page Paper'>
<group>
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
</group>
</page>
</xpath>
</field>
</record>
There are many ways to do this, however I suggest following options to you.
Modify an existing action and set context inside that and based on that context just write condition in view. (Remember here you need to override an action, and if you want to create another then you need to redefine menu to assign new action to that menu).
Create new view and set this view reference in an action of that model in which you want to show these fields. In new view you need to visible those fields, no need to extend product template existing view.
However the 1st solution is easy to achieve and 2nd one is lengthy.
Example of 1st solution:
<record id="action_name" model="ir.actions.act_window">
<field name="name">Name</field>
<field name="res_model">product.template</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="context" eval="{'is_manufacturing_model':True}" />
</record>
And then in view just write like this
<page string='Cover Page Paper'>
<group invisible="context.get('is_manufacturing_model',False)">
<field name="width"/>
<field name="length"/>
<field name="gsm"/>
<field name="rim_weight"/>
<group>
</page>

Show values of one2many in tree

I have a tree table inside of another tree table. When I'm editing, the nested table is properly shown inside of the cell. But when I just view the values, there are just comma separated ids in the cell (instead of the nested table). How can I display the table in the cell or at least formatted values in the view mode?
Nested table:
<record id="view_mrp_repair_line_item_tree" model="ir.ui.view">
<field name="name">mrp.repair.line.item.tree</field>
<field name="model">mrp.repair.line.item</field>
<field name="type">tree</field>
<field name="arch" type="xml">
<tree string="Repair line items" editable="bottom">
<field name="description" />
<field name="price" />
</tree>
</field>
</record>
The parent table:
<field colspan="4" mode="tree" name="operations" nolabel="1" widget="one2many_list">
<tree string="Operations" editable="bottom">
...
<field name="items" context="{'default_repair_line_id':active_id}" widget="one2many_list" />
</tree>
</field>
Model from nested table:
class mrp_repair_line_item(osv.osv):
_name = 'mrp.repair.line.item'
_columns = {
'repair_line_id': fields.many2one('mrp.repair.line', 'Repair Line', required=True),
'description': fields.char('Description', required=False, size=160),
'price': fields.float('Price', required=False)
}
mrp_repair_line_item()
You can create a functional field that returns a single string that represents the values and display that field instead. For example: [description1: Price1], [description2: Price2], ...