跳转到主要内容

将Google地图视图类型添加到Odoo Web客户端

项目描述

Beta License: AGPL-3 OCA/geospatial Translate me on Weblate Try me on Runbot

本模块包含三个新功能
  • 新视图类型和模式 “地图”

  • 新小部件 “gplaces_address_autocomplete”

  • 新小部件 “gplaces_autocomplete”

目录

用法

地图视图 “地图”:-

基本上,这个新的视图 地图 将将谷歌地图集成到Odoo中。使您能够在地图上显示 res.partner 地理位置或任何包含地理定位的模型。此功能将与Odoo无缝工作,这意味着您可以使用Odoo搜索功能搜索合作伙伴的位置。

有五个可自定义的可用属性:-

  • lat : 告诉地图对象上的经度字段的属性 __[强制__]

  • lng : 告诉地图对象上的纬度字段的属性 __[强制__]

  • color : 修改标记颜色的属性(可选)任何给定的颜色都将设置所有标记的颜色 __[可选__]。

  • colors : 与属性 color 类似,但更可配置(您可以设置标记颜色取决于其值)此属性类似于Odoo树视图上的 colors __[可选__]。

  • library告诉地图将加载哪个地图的属性 __[强制__]。

    此选项有两个值:1. geometry 2. drawing

XML地图视图定义。例如

<record id="view_res_partner_map" model="ir.ui.view">
    <field name="name">view.res.partner.map</field>
    <field name="model">res.partner</field>
    <field name="arch" type="xml">
        <map class="o_res_partner_map" library='geometry' string="Map" lat="partner_latitude" lng="partner_longitude" colors="blue:company_type=='person';green:company_type=='company';">
            <field name="id"/>
            <field name="partner_latitude"/>
            <field name="partner_longitude"/>
            <field name="company_type"/>
            <field name="color"/>
            <field name="display_name"/>
            <field name="title"/>
            <field name="email"/>
            <field name="parent_id"/>
            <field name="is_company"/>
            <field name="function"/>
            <field name="phone"/>
            <field name="street"/>
            <field name="street2"/>
            <field name="zip"/>
            <field name="city"/>
            <field name="country_id"/>
            <field name="mobile"/>
            <field name="state_id"/>
            <field name="category_id"/>
            <field name="image_small"/>
            <field name="type"/>
            <templates>
                <t t-name="kanban-box">
                    <div class="oe_kanban_global_click o_res_partner_kanban">
                        <div class="o_kanban_image">
                            <t t-if="record.image_small.raw_value">
                                <img t-att-src="kanban_image('res.partner', 'image_small', record.id.raw_value)"/>
                            </t>
                            <t t-if="!record.image_small.raw_value">
                                <t t-if="record.type.raw_value === 'delivery'">
                                    <img t-att-src='_s + "/base/static/src/img/truck.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
                                </t>
                                <t t-if="record.type.raw_value === 'invoice'">
                                    <img t-att-src='_s + "/base/static/src/img/money.png"' class="o_kanban_image oe_kanban_avatar_smallbox"/>
                                </t>
                                <t t-if="record.type.raw_value != 'invoice' &amp;&amp; record.type.raw_value != 'delivery'">
                                    <t t-if="record.is_company.raw_value === true">
                                        <img t-att-src='_s + "/base/static/src/img/company_image.png"'/>
                                    </t>
                                    <t t-if="record.is_company.raw_value === false">
                                        <img t-att-src='_s + "/base/static/src/img/avatar.png"'/>
                                    </t>
                                </t>
                            </t>
                        </div>
                        <div class="oe_kanban_details">
                            <strong class="o_kanban_record_title oe_partner_heading">
                                <field name="display_name"/>
                            </strong>
                            <div class="o_kanban_tags_section oe_kanban_partner_categories">
                                <span class="oe_kanban_list_many2many">
                                    <field name="category_id" widget="many2many_tags" options="{'color_field': 'color'}"/>
                                </span>
                            </div>
                            <ul>
                                <li t-if="record.parent_id.raw_value and !record.function.raw_value">
                                    <field name="parent_id"/>
                                </li>
                                <li t-if="!record.parent_id.raw_value and record.function.raw_value">
                                    <field name="function"/>
                                </li>
                                <li t-if="record.parent_id.raw_value and record.function.raw_value">
                                    <field name="function"/> at <field name="parent_id"/>
                                </li>
                                <li t-if="record.city.raw_value and !record.country_id.raw_value">
                                    <field name="city"/>
                                </li>
                                <li t-if="!record.city.raw_value and record.country_id.raw_value">
                                    <field name="country_id"/>
                                </li>
                                <li t-if="record.city.raw_value and record.country_id.raw_value">
                                    <field name="city"/>
            ,                        <field name="country_id"/>
                                </li>
                                <li t-if="record.email.raw_value" class="o_text_overflow">
                                    <field name="email"/>
                                </li>
                            </ul>
                            <div class="oe_kanban_partner_links"/>
                        </div>
                    </div>
                </t>
            </templates>
        </map>
    </field>
</record>

<record id="action_partner_map" model="ir.actions.act_window">
    ...
    <field name="view_type">form</field>
    <field name="view_mode">tree,form,map</field>
    ...
</record>

标记信息窗口将使用 kanban-box �看板卡片样式。

如何在地图上设置标记颜色?

有两个属性

  • colors:允许您显示不同的标记颜色来表示地图上的记录

  • color:地图上所有记录的统一标记颜色

XML颜色视图定义。例如

<!-- colors -->
<map string="Map" lat="partner_latitude" lng="partner_longitude" colors="green:company_type=='person';blue:company_type=='company';">
    ...
</map>

<!-- color -->
<map string="Map" lat="partner_latitude" lng="partner_longitude" color="orange">
    ...
</map>

新小部件 “gplaces_address_autocomplete”

将[地点自动完成地址表单](https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete-addressform)集成到Odoo的新小部件。

该小部件有四个可修改的选项

  • component_form

  • fillfields

  • lat

  • lng

组件表单 component_form

是一个选项,用于修改从地理编码器返回的对象中想要获取的值。有关Google组件类型的完整文档,请参阅[此处](https://developers.google.com/maps/documentation/geocoding/intro#Types)

默认情况下,此选项配置如下javascript值

{
    'street_number': 'long_name',
    'route': 'long_name',
    'intersection': 'short_name',
    'political': 'short_name',
    'country': 'short_name',
    'administrative_area_level_1': 'short_name',
    'administrative_area_level_2': 'short_name',
    'administrative_area_level_3': 'short_name',
    'administrative_area_level_4': 'short_name',
    'administrative_area_level_5': 'short_name',
    'colloquial_area': 'short_name',
    'locality': 'short_name',
    'ward': 'short_name',
    'sublocality_level_1': 'short_name',
    'sublocality_level_2': 'short_name',
    'sublocality_level_3': 'short_name',
    'sublocality_level_5': 'short_name',
    'neighborhood': 'short_name',
    'premise': 'short_name',
    'postal_code': 'short_name',
    'natural_feature': 'short_name',
    'airport': 'short_name',
    'park': 'short_name',
    'point_of_interest': 'long_name'
}

此配置可以在XML视图字段定义中修改

<record id="view_res_partner_form" model="ir.ui.view">
   ...
   <field name="arch" type="xml">
        ...
        <field name="street" widget="gplaces_address_form" options="{'component_form': {'street_number': 'short_name'}}"/>
        ...
    </field>
</record>

填充字段 fillfields

是一个受gplaces_address_autocomplete小部件影响的选项。

此选项应包含您希望小部件为每个给定字段自动填充的已知字段。字段可以包含来自组件表单的一个或多个元素。默认情况下,此选项配置如下javascript值

{
    'street': ['street_number', 'route'],
    'street2': ['administrative_area_level_3', 'administrative_area_level_4', 'administrative_area_level_5'],
    'city': ['locality', 'administrative_area_level_2'],
    'zip': 'postal_code',
    'state_id': 'administrative_area_level_1',
    'country_id': 'country',
}

此配置也可以在XML视图字段定义中修改

<record id="view_res_partner_form" model="ir.ui.view">
    ...
    <field name="arch" type="xml">
        ...
        <field name="street" widget="google_places" options="{'fillfields': {'street2': ['route', 'street_number']}}"/>
        ...
    </field>
</record>

纬度 lat 和经度 lng

此选项告诉小部件地理定位的字段,以便自动填充这些字段。

新小部件 “gplaces_autocomplete”

将[地点自动完成](https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete)集成到Odoo的新小部件。此小部件的配置与gplaces_address_autocomplete类似。

组件表单 component_form

gplaces_address_autocomplete组件表单相同的配置

填充字段 fillfields

此配置与gplaces_address_autocomplete类似。默认情况下,此选项配置如下javascript值

{
    general: {
        name: 'name',
        website: 'website',
        phone: ['international_phone_number', 'formatted_phone_number']
    },
    geolocation: {
        partner_latitude: 'latitude',
        partner_longitude: 'longitude'
    },
    address: {
        street: ['street_number', 'route'],
        street2: ['administrative_area_level_3', 'administrative_area_level_4', 'administrative_area_level_5'],
        city: ['locality', 'administrative_area_level_2'],
        zip: 'postal_code',
        state_id: 'administrative_area_level_1',
        country_id: 'country'
    }
};

错误跟踪器

问题在GitHub Issues上追踪。如果遇到问题,请检查是否已报告您的问题。如果是您首先发现的,请提供详细且受欢迎的反馈,帮助我们解决它。

请不要直接联系贡献者以获取支持或帮助解决技术问题。

致谢

作者

  • 开源集成商

贡献者

维护者

本模块由OCA维护。

Odoo Community Association

OCA,即Odoo社区协会,是一个非营利组织,其使命是支持Odoo功能的协作开发并推广其广泛使用。

当前 维护者

gityopie wolfhall

本模块是GitHub上OCA/geospatial项目的一部分。

欢迎您贡献。要了解如何贡献,请访问https://odoo-community.org/page/Contribute

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

本版本没有可用的源分发文件。请参阅生成分发存档的教程

构建分发

由以下支持