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
_images/Markering_823.png

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', '&lt;', 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', '&lt;', 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="['&amp;', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
                <filter string="Lost" name="lost" domain="['&amp;', ('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', '&lt;', 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', '&gt;', 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>
_images/Markering_824.png

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 “&”)

_images/Markering_824.png

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/>
_images/Markering_825.png _images/Markering_826.png _images/Markering_830.png

Filter

  • Etiketter för gjorda val (filter/gruppering/favorit)
  • Använd förstoringsglaset för att se extra funktioner
_images/Markering_823.png

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', '&lt;', 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', '&lt;', 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="['&amp;', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
                <filter string="Lost" name="lost" domain="['&amp;', ('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', '&lt;', 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', '&gt;', 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>
_images/Markering_824.png

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/>
_images/Markering_825.png _images/Markering_826.png _images/Markering_830.png

Gruppera

  • Etiketter för gjorda val (filter/gruppering/favorit)
  • Använd förstoringsglaset för att se extra funktioner
_images/Markering_823.png

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', '&lt;', 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', '&lt;', 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="['&amp;', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
                <filter string="Lost" name="lost" domain="['&amp;', ('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', '&lt;', 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', '&gt;', 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>
_images/Markering_824.png

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/>
_images/Markering_825.png _images/Markering_826.png _images/Markering_830.png

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

_images/Markering_833.png

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.

_images/Markering_833.png

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

_images/Markering_847.png

Kanban-strukturen:

 <kanban>
        Lista ingående fält
        <field name="priority"/>
        <field name="xxxx"/>

       <progressbar/>


                 <templates>
                        Beskrivning av lappen
                 </templates>
</kanban>
  1. 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">
    
  2. Progressbar:

    <progressbar field="activity_state"
        colors="{&quot;planned&quot;: &quot;success&quot;, &quot;today&quot;: &quot;warning&quot;, &quot;overdue&quot;: &quot;danger&quot;}"
        sum_field="planned_revenue"
        help="This bar allows to filter the opportunities based on scheduled activities."/>
    
  3. 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="{&quot;group_by_tooltip&quot;: {&quot;requirements&quot;: &quot;Description&quot;, &quot;legend_priority&quot;: &quot;Use of stars&quot;}}"/>
                <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="{&quot;planned&quot;: &quot;success&quot;, &quot;today&quot;: &quot;warning&quot;, &quot;overdue&quot;: &quot;danger&quot;}" 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
_images/Markering_701.png
  1. Drill down, gruppering i flera led
  2. Kryssa objekt
  3. 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>

Söktyper

Kalender

_images/Markering_844.png

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>

Söktyper

Pivot

  • Pivottabell (BI kub)
  • Underlag vyer på anslagstavla
_images/Markering_848.png

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
_images/Markering_846.png

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

_images/Markering_835.png

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', '&lt;', 100)]}"/>
<button name="toggle_active" string="Restore" type="object" attrs="{'invisible': ['|', ('probability', '&gt;', 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', '&lt;', 2)]}"> Meetings</span>
<span class="o_stat_text" attrs="{'invisible': [('meeting_count', '&gt;', 1)]}"> Meeting</span>
</div>
</button>
</div>
<div class="badge-pill badge-danger float-right" attrs="{'invisible': ['|', ('probability', '&gt;', 0), ('active', '=', True)]}">Lost</div>
<div class="badge-pill badge-success float-right" attrs="{'invisible': [('probability', '&lt;', 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=”{&quot; no_open&quot;: True}”/> <field name=”zip” placeholder=”ZIP” class=”o_address_zip”/> <field name=”country_id” placeholder=”Country” class=”o_address_country” options= {&quot;no_open&quot;: True, &quot;no_create&quot;: 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=”{&quot;no_open&quot;: 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

_images/Markering_838.png

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

_images/Markering_837.png

Kod för funktionsknapp:

<button name="action_set_won_rainbowman" string="Mark Won" type="object"

class=”oe_highlight” attrs=”{‘invisible’: [‘|’, (‘active’,’=’,False), (‘probability’, ‘=’, 100)] }” />

Dölja formulärelement

_images/kontakter.png

Kod för group:

group=”admin”

Aktiviteter

  • Listar aktiviteter, aktivitetstyp och dess status
  • Använd förstoringsglaset för att se extra funktioner
_images/Markering_843.png

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', '&lt;', 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', '&lt;', 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="['&amp;', ('active', '=', True), ('stage_id.probability', '=', 100)]"/>
                <filter string="Lost" name="lost" domain="['&amp;', ('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', '&lt;', 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', '&gt;', 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>
views/Markering_824.png

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

  1. many2many (förvalt)
  2. many2many_tags
  3. many2many_checkboxes
  4. many2many_kanban
  5. many2many_counter
  6. 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.

_images/many2many_widget.png

Alternativ

  • no_create - tar bort “Create” knappen.

Exempel

<field name="field_name_ids" options="{'no_create': True}"/>

Widgeten many2many_tags

En Facebookliknande flervalsmarkering.

_images/many2many_tags_widget.png

Alternativ

  • no_quick_create - tar bort Create and edit... alternativet.
  • no_quick_edit - tar bort Skapa "foo" alternativet.
_images/many2many_tags_widget2.png
  • no_create - no_qick_create och no_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.

_images/many2many_checkboxes_widget.png

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:

_images/many2many_kanban_widget.png

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.

_images/x2many_counter_widget.png

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.
_images/many2many_binary_widget.png

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

_images/markering_866.png _images/markering_867.png _images/markering_868.png _images/markering_869.png

List Widgets

progressbar

Displays float fields as a progress bar.

Example

<XXXXXXXXXXXXX/>

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