Your Topic Title
Subsequent indented lines comprise the body of the topic, and are interpreted as body elements.
Introduktion¶
Ett utbildningsmaterial för Odoo 12.
Sökrutan¶
- Etiketter för gjorda val (filter/gruppering/favorit)
- Använd förstoringsglaset för att se extra funktioner

kod för sökrutan:
<search string="Search Opportunities">
<field name="name" string="Opportunity" filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
<filter string="My Pipeline" name="assigned_to_me" domain="[('user_id', '=', uid)]" help="Opportunities that are assigned to me"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
<filter string="Open Opportunities" name="open_opportunities" domain="[('probability', '<', 100), ('type', '=', 'opportunity')]" help="Open Opportunities"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="Overdue Opportunities" name="overdue_opp" domain="[('date_deadline', '<', context_today().strftime('%Y-%m-%d')), ('date_closed', '=', False)]" help="Opportunities with a date of Expected Closing which is in the past"/>
<filter string="Creation Date" name="creation_date" date="create_date"/>
<filter string="Expected Closing" name="close_this_month" date="date_deadline"/>
<filter string="Closed Date" name="close_date" date="date_closed"/>
<separator/>
<filter string="Won" name="won" domain="['&', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
<filter string="Lost" name="lost" domain="['&', ('active', '=', False), ('probability', '=', 0)]"/>
<separator/>
<filter string="Activities Todo" name="activities_my" domain="[('activity_ids.user_id', '=', uid)]"/>
<separator/>
<filter string="Late Activities" name="activities_overdue" domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" help="Show all opportunities for which the next action date is before today"/>
<filter string="Today Activities" name="activities_today" domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter string="Future Activities" name="activities_upcoming_all" domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) ]"/>
<group expand="0" string="Group By" colspan="16">
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
<filter name="stage" string="Stage" context="{'group_by':'stage_id'}"/>
<filter name="city" string="City" context="{'group_by': 'city'}"/>
<filter string="Country" name="country" context="{'group_by':'country_id'}"/>
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason'}"/>
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Campaign" name="compaign" domain="[]" context="{'group_by':'campaign_id'}"/>
<filter string="Medium" name="medium" domain="[]" context="{'group_by':'medium_id'}"/>
<filter string="Source" name="source" domain="[]" context="{'group_by':'source_id'}"/>
<separator orientation="vertical"/>
<filter string="Creation Date" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Conversion Date" name="date_conversion" context="{'group_by': 'date_conversion'}" groups="crm.group_use_lead"/>
<filter string="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
<filter string="Expected Closing Date" name="date_deadline" context="{'group_by':'date_deadline'}"/>
</group>
</search>

Första field name är standardsökningen:
<field name="name" string="Opportunity"
filter_domain="['|','|','|',
('partner_id','ilike',self),
('partner_name','ilike',self),('email_from','ilike',self),
('name', 'ilike', self)]"/>
Övriga field name är:
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
Fritextsökning¶
- Standardsökning
Skapa en domän med attribut som skall ingå i “fritextsökningen”
Note
Domän byggs upp av en lista med tupler/villkor som kan förekomma i en WHERE-Clause i SQL. Villkoret beskrivs som tre element: attribut, xxx, variabel. Exempelvis (‘partner_id’,’ilike’,self). Framför listan beskrivs förhållandet mellan villkoren (OR “|” AND “&”)

Första field name är standardsökningen:
<field name="name" string="Opportunity"
filter_domain="['|','|','|',
('partner_id','ilike',self),
('partner_name','ilike',self),('email_from','ilike',self),
('name', 'ilike', self)]"/>
- Övriga field name är::
- <field name=”tag_ids” string=”Tag” filter_domain=”[(‘tag_ids’, ‘ilike’, self)]”/> <field name=”stage_id” domain=”[]”/> <field name=”user_id”/> <field name=”team_id”/> <field name=”partner_id” operator=”child_of” string=”Customer”/> <field name=”city”/> <field name=”country_id”/> <field name=”activity_type_id”/> <field name=”activity_summary”/> <field name=”probability”/> <field name=”lost_reason”/> <field name=”date_conversion”/> <separator/>



Filter¶
- Etiketter för gjorda val (filter/gruppering/favorit)
- Använd förstoringsglaset för att se extra funktioner

kod för sökrutan:
<search string="Search Opportunities">
<field name="name" string="Opportunity" filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
<filter string="My Pipeline" name="assigned_to_me" domain="[('user_id', '=', uid)]" help="Opportunities that are assigned to me"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
<filter string="Open Opportunities" name="open_opportunities" domain="[('probability', '<', 100), ('type', '=', 'opportunity')]" help="Open Opportunities"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="Overdue Opportunities" name="overdue_opp" domain="[('date_deadline', '<', context_today().strftime('%Y-%m-%d')), ('date_closed', '=', False)]" help="Opportunities with a date of Expected Closing which is in the past"/>
<filter string="Creation Date" name="creation_date" date="create_date"/>
<filter string="Expected Closing" name="close_this_month" date="date_deadline"/>
<filter string="Closed Date" name="close_date" date="date_closed"/>
<separator/>
<filter string="Won" name="won" domain="['&', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
<filter string="Lost" name="lost" domain="['&', ('active', '=', False), ('probability', '=', 0)]"/>
<separator/>
<filter string="Activities Todo" name="activities_my" domain="[('activity_ids.user_id', '=', uid)]"/>
<separator/>
<filter string="Late Activities" name="activities_overdue" domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" help="Show all opportunities for which the next action date is before today"/>
<filter string="Today Activities" name="activities_today" domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter string="Future Activities" name="activities_upcoming_all" domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) ]"/>
<group expand="0" string="Group By" colspan="16">
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
<filter name="stage" string="Stage" context="{'group_by':'stage_id'}"/>
<filter name="city" string="City" context="{'group_by': 'city'}"/>
<filter string="Country" name="country" context="{'group_by':'country_id'}"/>
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason'}"/>
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Campaign" name="compaign" domain="[]" context="{'group_by':'campaign_id'}"/>
<filter string="Medium" name="medium" domain="[]" context="{'group_by':'medium_id'}"/>
<filter string="Source" name="source" domain="[]" context="{'group_by':'source_id'}"/>
<separator orientation="vertical"/>
<filter string="Creation Date" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Conversion Date" name="date_conversion" context="{'group_by': 'date_conversion'}" groups="crm.group_use_lead"/>
<filter string="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
<filter string="Expected Closing Date" name="date_deadline" context="{'group_by':'date_deadline'}"/>
</group>
</search>

Första field name är standardsökningen:
<field name="name" string="Opportunity"
filter_domain="['|','|','|',
('partner_id','ilike',self),
('partner_name','ilike',self),('email_from','ilike',self),
('name', 'ilike', self)]"/>
- Övriga field name är::
- <field name=”tag_ids” string=”Tag” filter_domain=”[(‘tag_ids’, ‘ilike’, self)]”/> <field name=”stage_id” domain=”[]”/> <field name=”user_id”/> <field name=”team_id”/> <field name=”partner_id” operator=”child_of” string=”Customer”/> <field name=”city”/> <field name=”country_id”/> <field name=”activity_type_id”/> <field name=”activity_summary”/> <field name=”probability”/> <field name=”lost_reason”/> <field name=”date_conversion”/> <separator/>



Gruppera¶
- Etiketter för gjorda val (filter/gruppering/favorit)
- Använd förstoringsglaset för att se extra funktioner

kod för sökrutan:
<search string="Search Opportunities">
<field name="name" string="Opportunity" filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
<filter string="My Pipeline" name="assigned_to_me" domain="[('user_id', '=', uid)]" help="Opportunities that are assigned to me"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
<filter string="Open Opportunities" name="open_opportunities" domain="[('probability', '<', 100), ('type', '=', 'opportunity')]" help="Open Opportunities"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="Overdue Opportunities" name="overdue_opp" domain="[('date_deadline', '<', context_today().strftime('%Y-%m-%d')), ('date_closed', '=', False)]" help="Opportunities with a date of Expected Closing which is in the past"/>
<filter string="Creation Date" name="creation_date" date="create_date"/>
<filter string="Expected Closing" name="close_this_month" date="date_deadline"/>
<filter string="Closed Date" name="close_date" date="date_closed"/>
<separator/>
<filter string="Won" name="won" domain="['&', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
<filter string="Lost" name="lost" domain="['&', ('active', '=', False), ('probability', '=', 0)]"/>
<separator/>
<filter string="Activities Todo" name="activities_my" domain="[('activity_ids.user_id', '=', uid)]"/>
<separator/>
<filter string="Late Activities" name="activities_overdue" domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" help="Show all opportunities for which the next action date is before today"/>
<filter string="Today Activities" name="activities_today" domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter string="Future Activities" name="activities_upcoming_all" domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) ]"/>
<group expand="0" string="Group By" colspan="16">
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
<filter name="stage" string="Stage" context="{'group_by':'stage_id'}"/>
<filter name="city" string="City" context="{'group_by': 'city'}"/>
<filter string="Country" name="country" context="{'group_by':'country_id'}"/>
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason'}"/>
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Campaign" name="compaign" domain="[]" context="{'group_by':'campaign_id'}"/>
<filter string="Medium" name="medium" domain="[]" context="{'group_by':'medium_id'}"/>
<filter string="Source" name="source" domain="[]" context="{'group_by':'source_id'}"/>
<separator orientation="vertical"/>
<filter string="Creation Date" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Conversion Date" name="date_conversion" context="{'group_by': 'date_conversion'}" groups="crm.group_use_lead"/>
<filter string="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
<filter string="Expected Closing Date" name="date_deadline" context="{'group_by':'date_deadline'}"/>
</group>
</search>

Första field name är standardsökningen:
<field name="name" string="Opportunity"
filter_domain="['|','|','|',
('partner_id','ilike',self),
('partner_name','ilike',self),('email_from','ilike',self),
('name', 'ilike', self)]"/>
Övriga field name är:
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>



Vyer¶
Vyer deklareras i XML¶
- Vyer är deklarerade i XML
- Arv implementeras med xpath (eller förenklad syntax)
- En vy startas via en action-record
https://medium.com/@reedrehg/clicking-everywhere-in-odoo-c659e9c6f09b

Kanban¶
I Kanban fokusera man på att avsluta uppgifter inte inleda dem. Kanban kännetecknar också att man med tydliga och visuella signaler visar organisationens arbetsflöde. Man ser till att begränsa pågående arbetsuppgifter, man använder visuella metoder som lappar för att kommunicera, man jagar flaskhalsar och man ser till att återkoppla för att effektivisera ytterligare.

Kraftfullt verkgyg som visar progress eller kan användas för att fördela uppgifter

Kanban-strukturen:
<kanban>
Lista ingående fält
<field name="priority"/>
<field name="xxxx"/>
<progressbar/>
<templates>
Beskrivning av lappen
</templates>
</kanban>
Kanban-record:
<kanban default_group_by="stage_id" class="o_kanban_small_column o_opportunity_kanban" on_create="quick_create" quick_create_view="crm.quick_create_opportunity_form" archivable="false">
Progressbar:
<progressbar field="activity_state" colors="{"planned": "success", "today": "warning", "overdue": "danger"}" sum_field="planned_revenue" help="This bar allows to filter the opportunities based on scheduled activities."/>
Lappen:
<templates> <t t-name="kanban-box"> <div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click"> <div class="o_dropdown_kanban dropdown"/> Meny </div> <div class="oe_kanban_content"> Innehåll <div class="o_kanban_record_bottom"> <div class="oe_kanban_bottom_left" /> <div class="oe_kanban_bottom_right" /> </div> </div> </t> </templates>
Hela kanban-koden:
<kanban default_group_by="stage_id" class="o_kanban_small_column o_opportunity_kanban" on_create="quick_create" quick_create_view="crm.quick_create_opportunity_form" archivable="false">
<field name="stage_id" options="{"group_by_tooltip": {"requirements": "Description", "legend_priority": "Use of stars"}}"/>
<field name="color"/>
<field name="priority"/>
<field name="planned_revenue"/>
<field name="kanban_state"/>
<field name="activity_date_deadline"/>
<field name="user_email"/>
<field name="user_id"/>
<field name="partner_address_email"/>
<field name="message_needaction_counter"/>
<field name="partner_id"/>
<field name="activity_summary"/>
<field name="active"/>
<field name="company_currency"/>
<field name="activity_state"/>
<field name="activity_ids"/>
<progressbar field="activity_state" colors="{"planned": "success", "today": "warning", "overdue": "danger"}" sum_field="planned_revenue" help="This bar allows to filter the opportunities based on scheduled activities."/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="#{kanban_color(record.color.raw_value)} oe_kanban_global_click">
<div class="o_dropdown_kanban dropdown">
<a class="dropdown-toggle o-no-caret btn" role="button" data-toggle="dropdown" href="#" aria-label="Dropdown menu" title="Dropdown menu">
<span class="fa fa-ellipsis-v"/>
</a>
<div class="dropdown-menu" role="menu">
<t t-if="widget.editable"><a role="menuitem" type="edit" class="dropdown-item">Edit</a></t>
<t t-if="widget.deletable"><a role="menuitem" type="delete" class="dropdown-item">Delete</a></t>
<ul class="oe_kanban_colorpicker" data-field="color"/>
</div>
</div>
<div class="oe_kanban_content">
<div>
<strong class="o_kanban_record_title"><field name="name"/></strong>
</div>
<div>
<field name="tag_ids" widget="many2many_tags" options="{'color_field': 'color'}"/>
</div>
<div class="text-muted o_kanban_record_subtitle">
<t t-if="record.planned_revenue.raw_value"><field name="planned_revenue" widget="monetary" options="{'currency_field': 'company_currency'}"/><span t-if="record.partner_id.value">,</span></t> <span t-if="record.partner_id.value"> <t t-esc="record.partner_id.value"/></span>
</div>
<div class="o_kanban_record_bottom">
<div class="oe_kanban_bottom_left">
<field name="priority" widget="priority" groups="base.group_user"/>
<t t-if="record.message_needaction_counter.raw_value">
<span role="alert" class="oe_kanban_mail_new" title="Unread Messages"><i class="fa fa-comments" aria-label="Unread messages" role="img"/><t t-raw="record.message_needaction_counter.raw_value"/></span>
</t>
<field name="activity_ids" widget="kanban_activity"/>
</div>
<div class="oe_kanban_bottom_right">
<img t-att-src="kanban_image('res.users', 'image_small', record.user_id.raw_value)" t-att-title="record.user_id.value" t-att-alt="record.user_id.value" width="24" height="24" class="oe_kanban_avatar"/>
</div>
</div>
</div>
<div class="oe_clear"/>
</div>
</t>
</templates>
</kanban>
Trädvy (lista)¶
- Etiketter för gjorda val (filter/gruppering/favorit)
- Använd förstoringsglaset för att se extra funktioner

- Drill down, gruppering i flera led
- Kryssa objekt
- Metoder som gör något med kryssade objekt
kod för trädvyn:
<tree string="Contacts">
<field name="display_name" string="Name"/>
<field name="function" invisible="1"/>
<field name="phone"/>
<field name="email"/>
<field name="user_id" invisible="1"/>
<field name="is_company" invisible="1"/>
<field name="country_id" invisible="1"/>
<field name="parent_id" invisible="1"/>
<field name="active" invisible="1"/>
</tree>
Kalender¶

kod för kalender:
<calendar string="Meetings" date_start="start" date_stop="stop" date_delay="duration" all_day="allday"
readonly_form_view_id="384" event_open_popup="true" event_limit="3" color="partner_id">
<field name="name"/>
<field name="partner_ids" write_model="calendar.contacts" write_field="partner_id"
avatar_field="image_small"/>
<field name="is_highlighted" invisible="1"/>
</calendar>
Pivot¶
- Pivottabell (BI kub)
- Underlag vyer på anslagstavla

kod för pivottabellen:
<record id="crm_lead_action_activities" model="ir.actions.act_window">
<field name="name">Next Activities</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">crm.lead</field>
<field name="view_mode">tree,form,kanban,calendar,pivot,graph</field>
<field name="search_view_id" ref="crm.view_crm_case_opportunities_filter"/>
<field name="view_ids"
eval="[(5, 0, 0), (0, 0, {'view_mode': 'tree', 'view_id': ref('crm_lead_view_tree_activity')}),
(0, 0, {'view_mode': 'form', 'view_id': ref('crm_case_form_view_oppor')}),
(0, 0, {'view_mode': 'kanban'}), (0, 0, {'view_mode': 'calendar'}), (0, 0, {'view_mode': 'pivot'}), (0, 0, {'view_mode': 'graph'})]"/>
<field name="domain">[('type','=','opportunity'), ('activity_date_deadline', '!=', False)]</field>
<field name="context">{
'default_type': 'opportunity',
'default_user_id': uid,
'search_default_activities_my': 1,
}
</field>
<field name="help" type="html">
<p class="o_view_nocontent_empty_folder">
No next activity
</p><p>
Here is the list of your next activities. Those are linked to your opportunities.
To set a next activity, go on an opportunity and add one. It will then appear in this list.
</p>
</field>
</record>
Diagram¶
- Urval, grupperingar, värden dynamiskt valbara
- Lägg på anslagstavla

kod för vyn:
<record id="crm_lead_view_graph" model="ir.ui.view">
<field name="name">crm.lead.view.graph</field>
<field name="model">crm.lead</field>
<field name="arch" type="xml">
<graph string="Opportunities">
<field name="stage_id" type="col"/>
<field name="user_id" type="row"/>
</graph>
</field>
</record>
Formulär¶

kod för formuläret:
<form string="Opportunities" class="o_opportunity_form">
<header>
<button name="action_set_won_rainbowman" string="Mark Won" type="object" class="oe_highlight" attrs="{'invisible': ['|', ('active','=',False), ('probability', '=', 100)]}"/>
<button name="136" string="Mark Lost" type="action" class="oe_highlight" context="{'default_lead_id': active_id}" attrs="{'invisible': [('active', '=', False),('probability', '<', 100)]}"/>
<button name="toggle_active" string="Restore" type="object" attrs="{'invisible': ['|', ('probability', '>', 0), ('active', '=', True)]}"/>
<field name="stage_id" widget="statusbar" options="{'clickable': '1', 'fold_field': 'fold'}" domain="['|', ('team_id', '=', team_id), ('team_id', '=', False)]" attrs="{'invisible': [('active', '=', False)]}"/>
</header>
<sheet>
<field name="active" invisible="1"/>
<div class="oe_button_box" name="button_box">
<button class="oe_stat_button" type="object" context="{'partner_id': partner_id}" name="action_schedule_meeting" icon="fa-calendar">
<div class="o_stat_info">
<field name="meeting_count" class="o_stat_value"/>
<span class="o_stat_text" attrs="{'invisible': [('meeting_count', '<', 2)]}"> Meetings</span>
<span class="o_stat_text" attrs="{'invisible': [('meeting_count', '>', 1)]}"> Meeting</span>
</div>
</button>
</div>
<div class="badge-pill badge-danger float-right" attrs="{'invisible': ['|', ('probability', '>', 0), ('active', '=', True)]}">Lost</div>
<div class="badge-pill badge-success float-right" attrs="{'invisible': [('probability', '<', 100)]}">Won</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1><field name="name" placeholder="e.g. Product Pricing"/></h1>
<h2 class="o_row row no-gutters d-flex">
<div class="col">
<label for="planned_revenue" class="oe_edit_only"/>
<div class="o_row">
<field name="company_currency" invisible="1"/>
<field name="planned_revenue" class="oe_inline" widget="monetary" options="{'currency_field': 'company_currency'}"/>
<span class="oe_grey"> at </span>
</div>
</div>
<div class="col">
<label for="probability" class="oe_edit_only"/>
<div class="o_row d-flex">
<field name="probability" widget="integer" class="oe_inline"/>
<span class="oe_grey"> %</span>
</div>
</div>
</h2>
</div>
<group>
<group>
<field name="partner_id" widget="res_partner_many2one" string="Customer"
domain=”[(‘customer’, ‘=’, True)]” context=”{‘search_default_customer’: 1, ‘default_name’: partner_name, ‘default_street’: street,’default_street2’: street2, ‘default_city’: city,’default_state_id’: state_id, ‘default_zip’: zip, ‘default_country_id’: country_id,’default_function’: function, ‘default_phone’: phone, ‘default_mobile’: mobile, ‘default_email’: email_from, ‘default_user_id’: user_id, ‘default_team_id’: team_id, ‘default_website’: website,’show_vat’: True,}”/> <field name=”is_blacklisted” invisible=”1”/> <field name=”partner_is_blacklisted” invisible=”1”/> <label for=”email_from” class=”oe_inline”/> <div class=”o_row o_row_readonly”> <i class=”fa fa-ban” style=”color: red;” role=”img” title=”This email is blacklisted for mass mailing” aria- label=”Blacklisted” attrs=”{‘invisible’: [‘|’, (‘is_blacklisted’, ‘=’, False), (‘partner_address_email’, ‘!=’, False)]}” groups=”base.group_user”/> <field name=”email_from” attrs=”{‘invisible’: [(‘partner_address_email’, ‘!=’, False)]}” string=”Email” widget=”email”/> <i class=”fa fa-ban” style=”color: red;” role=”img” title=”This email is blacklisted for mass mailing” aria- label=”Blacklisted” attrs=”{‘invisible’: [‘|’, (‘partner_is_blacklisted’, ‘=’, False), (‘partner_address_email’, ‘=’, False)]}” groups=”base.group_user”/> <field name=”partner_address_email” attrs=”{‘invisible’: [(‘partner_address_email’, ‘==’, False)]}” widget=”email” string=”Email”/> </div> <field name=”partner_address_phone” attrs=”{‘invisible’: [(‘partner_address_phone’, ‘==’, False)]}” readonly=”1” widget=”phone” string=”Phone”/> <field name=”phone” attrs=”{‘invisible’: [(‘partner_address_phone’, ‘!=’, False)]}” widget=”phone”/> </group> <group> <field name=”date_deadline”/> </group> <group> <field name=”user_id” context=”{‘default_groups_ref’: [‘base.group_user’, ‘base.group_partner_manager’, ‘sales_team.group_sale_salesman_all_leads’], ‘team_id’: team_id}” domain=”[(‘share’, ‘=’, False)]”/> <field name=”team_id” widget=”selection”/> </group> <group> <field name=”priority” widget=”priority”/> <field name=”tag_ids” widget=”many2many_tags” options=”{‘color_field’: ‘color’, ‘no_create_edit’: True}”/> <field name=”lost_reason” attrs=”{‘invisible’: [(‘active’, ‘=’, True)]}”/> <field name=”date_conversion” invisible=”1”/> </group> </group> <notebook colspan=”4”> <page string=”Internal Notes”> <field name=”description”/> </page> <page name=”lead” string=”Followup”> <group> <group string=”Initial Contact Information”> <field name=”partner_name”/> <label for=”street” string=”Address”/> <div class=”o_address_format”> <field name=”street” placeholder=”Street…” class=”o_address_street”/> <field name=”street2” placeholder=”Street 2…” class=”o_address_street”/> <field name=”city” placeholder=”City” class=”o_address_city”/> <field name=”state_id” class=”o_address_state” placeholder=”State” options=”{" no_open": True}”/> <field name=”zip” placeholder=”ZIP” class=”o_address_zip”/> <field name=”country_id” placeholder=”Country” class=”o_address_country” options= {"no_open": True, "no_create": True}”/> </div> <field name=”website” widget=”url” placeholder=”e.g. https://www.odoo.com”/> </group> <group class=”mt48”> <label for=”contact_name”/> <div class=”o_row”> <field name=”contact_name”/> <field name=”title” placeholder=”Title” domain=”[]” options=”{"no_open": True}”/> </div> <field name=”function”/> <field name=”partner_address_mobile” attrs=”{‘invisible’: [(‘partner_address_mobile’, ‘=’, False)]}” readonly=”1” widget=”phone” string=”Mobile”/> <field name=”mobile” attrs=”{‘invisible’: [(‘partner_address_mobile’, ‘!=’, False)]}” widget=”phone”/> </group> <group string=”Marketing”> <field name=”campaign_id”/> <field name=”medium_id”/> <field name=”source_id”/> </group> <group string=”Misc” name=”Misc”> <field name=”day_open” groups=”base.group_no_one”/> <field name=”day_close” groups=”base.group_no_one”/> <field name=”referred”/> <field name=”type” invisible=”1”/> </group> </group> </page> </notebook> </sheet> <div class=”oe_chatter”> <field name=”message_follower_ids” widget=”mail_followers”/> <field name=”activity_ids” widget=”mail_activity”/> <field name=”message_ids” widget=”mail_thread” options=”{‘post_refresh’: ‘recipients’}”/> </div> </form>
Progress bar¶

Kod för progressbar:
<field name="stage_id" widget="statusbar"
options=”{‘clickable’: ‘1’, ‘fold_field’: ‘fold’}” domain=”[‘|’, (‘team_id’, ‘=’, team_id), (‘team_id’, ‘=’, False)]” attrs=”{‘invisible’: [(‘active’, ‘=’, False)]}” />
Knappar¶

Kod för funktionsknapp:
<button name="action_set_won_rainbowman" string="Mark Won" type="object"
class=”oe_highlight” attrs=”{‘invisible’: [‘|’, (‘active’,’=’,False), (‘probability’, ‘=’, 100)] }” />
Aktiviteter¶
- Listar aktiviteter, aktivitetstyp och dess status
- Använd förstoringsglaset för att se extra funktioner

kod för sökrutan
<search string="Search Opportunities">
<field name="name" string="Opportunity" filter_domain="['|','|','|',('partner_id','ilike',self),('partner_name','ilike',self),('email_from','ilike',self),('name', 'ilike', self)]"/>
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
<filter string="My Pipeline" name="assigned_to_me" domain="[('user_id', '=', uid)]" help="Opportunities that are assigned to me"/>
<filter string="Unassigned" name="unassigned" domain="[('user_id','=', False)]" help="No salesperson"/>
<filter string="Open Opportunities" name="open_opportunities" domain="[('probability', '<', 100), ('type', '=', 'opportunity')]" help="Open Opportunities"/>
<separator/>
<filter string="Unread Messages" name="message_needaction" domain="[('message_needaction','=',True)]"/>
<separator/>
<filter string="Overdue Opportunities" name="overdue_opp" domain="[('date_deadline', '<', context_today().strftime('%Y-%m-%d')), ('date_closed', '=', False)]" help="Opportunities with a date of Expected Closing which is in the past"/>
<filter string="Creation Date" name="creation_date" date="create_date"/>
<filter string="Expected Closing" name="close_this_month" date="date_deadline"/>
<filter string="Closed Date" name="close_date" date="date_closed"/>
<separator/>
<filter string="Won" name="won" domain="['&', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
<filter string="Lost" name="lost" domain="['&', ('active', '=', False), ('probability', '=', 0)]"/>
<separator/>
<filter string="Activities Todo" name="activities_my" domain="[('activity_ids.user_id', '=', uid)]"/>
<separator/>
<filter string="Late Activities" name="activities_overdue" domain="[('activity_ids.date_deadline', '<', context_today().strftime('%Y-%m-%d'))]" help="Show all opportunities for which the next action date is before today"/>
<filter string="Today Activities" name="activities_today" domain="[('activity_ids.date_deadline', '=', context_today().strftime('%Y-%m-%d'))]"/>
<filter string="Future Activities" name="activities_upcoming_all" domain="[('activity_ids.date_deadline', '>', context_today().strftime('%Y-%m-%d')) ]"/>
<group expand="0" string="Group By" colspan="16">
<filter string="Salesperson" name="salesperson" context="{'group_by':'user_id'}"/>
<filter string="Sales Team" name="saleschannel" context="{'group_by':'team_id'}"/>
<filter name="stage" string="Stage" context="{'group_by':'stage_id'}"/>
<filter name="city" string="City" context="{'group_by': 'city'}"/>
<filter string="Country" name="country" context="{'group_by':'country_id'}"/>
<filter string="Lost Reason" name="lostreason" context="{'group_by':'lost_reason'}"/>
<filter string="Company" name="company" context="{'group_by':'company_id'}" groups="base.group_multi_company"/>
<filter string="Campaign" name="compaign" domain="[]" context="{'group_by':'campaign_id'}"/>
<filter string="Medium" name="medium" domain="[]" context="{'group_by':'medium_id'}"/>
<filter string="Source" name="source" domain="[]" context="{'group_by':'source_id'}"/>
<separator orientation="vertical"/>
<filter string="Creation Date" context="{'group_by':'create_date:month'}" name="month"/>
<filter string="Conversion Date" name="date_conversion" context="{'group_by': 'date_conversion'}" groups="crm.group_use_lead"/>
<filter string="Closed Date" name="date_closed" context="{'group_by':'date_closed'}"/>
<filter string="Expected Closing Date" name="date_deadline" context="{'group_by':'date_deadline'}"/>
</group>
</search>

Första field name är standardsökningen.
<field name="name" string="Opportunity"
filter_domain="['|','|','|',
('partner_id','ilike',self),
('partner_name','ilike',self),('email_from','ilike',self),
('name', 'ilike', self)]"/>
Övriga field name:
<field name="tag_ids" string="Tag" filter_domain="[('tag_ids', 'ilike', self)]"/>
<field name="stage_id" domain="[]"/>
<field name="user_id"/>
<field name="team_id"/>
<field name="partner_id" operator="child_of" string="Customer"/>
<field name="city"/>
<field name="country_id"/>
<field name="activity_type_id"/>
<field name="activity_summary"/>
<field name="probability"/>
<field name="lost_reason"/>
<field name="date_conversion"/>
<separator/>
Chatter¶
Aktivitet¶
Meny¶
Grafiska element (widgets)¶
Grafiska element för användning i formulär och trädvyer¶
Grafiska element för many2many
-fält i Odoo¶
many2many
(förvalt)many2many_tags
many2many_checkboxes
many2many_kanban
many2many_counter
many2many_binary
many2many
(förvalt)¶
Widgeten many2many
använder en förvald listvy för relaterad modell för att visa en lista av relaterade objekt.

Alternativ
no_create
- tar bort “Create” knappen.
Exempel
<field name="field_name_ids" options="{'no_create': True}"/>
Widgeten many2many_tags
¶
En Facebookliknande flervalsmarkering.

Alternativ
no_quick_create
- tar bortCreate and edit...
alternativet.no_quick_edit
- tar bortSkapa "foo"
alternativet.

no_create
-no_qick_create
ochno_create_edit
kombinerat.
Exempel
<field name="field_name"
widget="many2many_tags"
options="{'no_create_edit': True}"/>
Widgeten many2many_checkboxes
¶
Enligt en notering i dokumentationen till Odoo:
This type of field display a list of checkboxes. It works only with m2ms. This field
will display one checkbox for each record existing in the model targeted by the
relation, according to the given domain if one is specified. Checked records will
be added to the relation.
Det finns ingen möjlighet för denna widgt att skapa nya poster, exempelvis produkter.

Exempel
<field name="field_name" widget="many2many_checkboxes"/>
many2many_kanban
widgeten¶
Widgeten many2many_kanban
använder Kanbanvyn för att visa en lista av relaterade objekt.
Denna widget kan varieras på många sätt beroende på vilken Kanbanvy som används. Här är en skärmbild från project
modulen:

Exempel
<field name="field_name" widget="many2many_kanban">
<kanban>
<field name="name"/>
<templates>
<t t-name="kanban-box">
<field name="name"/>
</t>
</templates>
</kanban>
</field>
many2many_counter
widgeten¶
En enkel läs-endast widget som visar en länk med information om antalet relaterade objekt. Länkens målvy kan bli konfigurerad via views
alternativet.
Denna är även användbar med one2many
fält.

Alternativ
views
Enligt en kommentar i dokumentationen till Odoos källkod:The views to display in the act_window action. Must be a list of tuple whose first element is the id of the view to display (or False to take the default one) and the second element is the type of the view. Defaults to [[false, "tree"], [false, "form"]].
<field name="field_name" widget="x2many_counter" string="things"/>
many2many_binary
widgeten¶
Enligt en notering i dokumentationen till Odoo:
Widget for (many2many field) to upload one or more file in same time and
display in list. The user can delete his files.

Exempel
<field name="field_name" widget="many2many_binary" string="Attach a file"/>
Kanban Widgets¶
The current KanbanRecord(), can be used to fetch some meta-information. These methods are also available directly in the template context and don’t need to be accessed via widget




List Widgets¶
many2onebutton¶
Replaces the many2one field’s value by a checkmark if the field is filled, and a cross if it is not.
Example
<XXXXXXXXXXXXX/>
handle¶
For sequence
fields, instead of displaying the field’s value just displays a drag&drop icon.
Example
<XXXXXXXXXXXXX/>
Pivot Widgets¶
In Pivot view a field
can have a widget
attribute to dictate its format. The widget
should be a field formatter, of which the most interesting are date
, datetime
, float_time
, and monetary
.
Example
<pivot string="Timesheet">
<field name="employee_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="unit_amount" type="measure" widget="float_time"/>
</pivot>/>
Calendar Widgets¶
The current KanbanRecord(), can be used to fetch some meta-information. These methods are also available directly in the template context and don’t need to be accessed via widget getColor to convert in a color integer getAvatars to convert in an avatar image displayFields list of not invisible fields.
Field Widgets¶
Each field type is displayed in the form with the appropriate default widget. But additional alternative widgets are available to be used.
- For text fields, we have the following widgets:
- email is used to make the email text an actionable “mail-to” address.
- url is used to format the text as a clickable URL.
- html is used to render the text as HTML content; in edit mode, it features a WYSIWYG editor to allow for the formatting of the content without the need for using the HTML syntax.
- For numeric fields, we have the following widgets:
- handle is specifically designed for sequence fields in list views and displays a handle that allows you to drag lines to a custom order.
- float_time formats a float field with time quantities as hours and minutes. monetary displays a float field as the currency amount. It expects a currency_id companion field, but another field name can be provided with options=” {‘currency_field’: ‘currency_id’}”.
- progressbar presents a float as a progress percentage and can be useful for fields representing a completion rate.
- percentage and percentpie are widgets to use with float fields.
- For relational and selection fields, we have these additional widgets:
- many2many_tags displays values as a list of button-like labels.
- many2many_checkboxes displays the selectable values as a list of checkboxes.
- selection uses the selection field widget for a many-to-one field.
- radio displays the selection field options using radio buttons.
- priority represents the selection field as a list of clickable stars. The selection options are usually numeric digits.
- state_selection shows a semaphore light for the Kanban state selection list. The normal state is represented in gray, done is represented in green, and any other state is represented in red.
- pdf_viewer is for binary fields (introduced in Odoo 12).
Datakatalog¶
Geany EDI¶
## Tips och trix ##