View Inheritance
There are different view types in odoo. If you want to change an existing view in
odoo, for that you want to inherit the corresponding view and then do your changes.
It is possible to inherit all the views like form, tree, kanban, search etc.
For Inheriting a view you want to create an XML file inside the views folder for
adding the inheritance. And also add this file path inside the manifest -> data.
Inside the xml file you can add the inheriting records. i.e.,
<record id="view_crm_meeting_search" model="ir.ui.view">
<field name="name">calendar.event.form.inherit</field>
<field name="model">calendar.event</field>
<field name="inherit_id" ref="calendar.view_calendar_event_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='description']" position="after">
<field name="opportunity_id"/>
</xpath>
</field>
</record>
Here inheriting the already existing form view
view_calendar_event_search that is inside the module
calendar. Inherit_id is used to specify the parent view id that you
want to inherit. You can add module_name.parent_view_id for the inheritance. Then you
can do your changes by using xpath tag. And you can give different
values for xpath.
You can add expressions in different ways:
Some examples are:
expr="//field[@name='user_id']"
expr="//sheet/div[last()]"
expr="/kanban"
expr="."
expr="//filter[@name='activities_overdue']
expr="//header"
expr="//button[@name='action_open_product_lot']"
Also you can give different positions to the xpath. i.e.,
position=”after” : Display the field after the parent view mentioned in “expr”
position=”before” : Display the field before the parent view mentioned in “expr”
position=”inside” : Display the field inside the parent view mentioned in “expr”
position=”attributes” : Change the field attributes
position=”replace” : Replace the parent view field with newly created field
Form Style
If you want to provide a uniform experience for users, then you can style the document
form in Odoo. You can follow different steps for styling a form.
1. Header Element
Use the header element for adding buttons or status bar in the starting of a form.
For example:
<header>
<button name="action_quotation_send" string="Send by Email" type="object" states="sent,sale"
data-hotkey="g"/>
<button name="action_cancel" type="object" string="Cancel" attrs="{'invisible': ['|', ('state', 'not in',
['draft', 'sent','sale']), ('id', '=', False)]}" data-hotkey="z"/>
<button name="action_draft" states="cancel" type="object" string="Set to Quotation" data-hotkey="w"/>
<field name="state" widget="statusbar"
statusbar_visible="draft,sent,sale"/>
</header>
2. Sheet Element
Next you can add a <sheet> element. Inside this element you can add all other
fields.
3. Smart buttons
You can use smart buttons for getting other records that are related to this object. Next
step is to add smart buttons on the top of the sheet.
<div class="oe_button_box" name="button_box">
<button class="oe_stat_button"
name="button_journal_entries"
string="Journal Entries"
type="object"
attrs="{'invisible':[('move_line_count','=', 0)]}"
icon="fa-bars"/>
</div>
4. Prominent fields
If there are any prominent fields then put it first.
<div class="oe_left oe_title">
<label for="name" />
<h1>
<field name="name" />
</h1>
</div>
Then you can add all other fields.
5. Notebook
If there are a lot of fields on the form, then we can arrange them as notebook pages.
<notebook>
<page string="Internal Notes" name="internal_notes">
<field name="description" placeholder="Add a description..."/>
</page>
</notebook>
You can add more pages to a notebook.
6. Chatter widget
If you want to add a chatter on your form, you can add it after closing the sheet
element.
<div class="oe_chatter">
<field name="message_follower_ids" groups="base.group_user"/>
<field name="activity_ids"/>
<field name="message_ids"/>
</div>