chinese opt

This commit is contained in:
ivan deng
2019-03-04 21:16:49 +08:00
parent dbb20260ae
commit 8fccac0219
21 changed files with 352 additions and 408 deletions

View File

@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from .hooks import pre_init_hook
from .hooks import post_init_hook
from . import controllers
from . import models
from . import ir

View File

@@ -18,7 +18,7 @@
{
'name': "App base chinese中国化基本模块增强",
'version': '11.0.10.31',
'version': '11.19.03.04',
'author': 'Sunpop.cn',
'category': 'Base',
'website': 'http://www.sunpop.cn',
@@ -34,11 +34,16 @@
odoo Chinese Enhance. 中国化增强-基础
1. 中文默认值,如国家、时区、货币等。处理模块 base, product.
2. 客户加简称,地址显示中文化,客户编码显示优先
3. todo:中文演示数据(只有demo模式才加载)
3. 客户地址显示增加手机号与电话号码
4. 货币处理,增加排序显示
5. 修正产品类别的列表及m2o字段中不显示中文目录名的Bug
11. todo:中文演示数据(只有demo模式才加载)
""",
'pre_init_hook': 'pre_init_hook',
'post_init_hook': 'post_init_hook',
'depends': [
'base',
'product',
'l10n_cn'
],
@@ -46,11 +51,15 @@
'data': [
'views/res_partner_category_views.xml',
'views/res_partner_views.xml',
'views/res_currency_views.xml',
'views/ir_default_views.xml',
'data/ir_default_data.xml',
'data/ir_sequence_data.xml',
'data/base_data.xml',
'data/res_country_data.xml',
'data/res_currency_data.xml',
'data/product_data.xml',
'data/product_pricelist_data.xml',
],
'demo': [
],
@@ -64,5 +73,5 @@
],
'installable': True,
'application': True,
'auto_install': True,
'auto_install': False,
}

View File

@@ -4,27 +4,27 @@
<!-- 各种默认值 -->
<!--设置客户默认国家为中国-->
<record id="res_partner_country_id_default" model="ir.default">
<field name="field_id" eval="ref('base.field_res_partner_country_id')"/>
<field name="field_id" eval="ref('base.field_res_partner__country_id')"/>
<field name="json_value" eval="ref('base.cn')"/>
</record>
<!--设置客户默认省为广东-->
<record id="res_partner_state_id_default" model="ir.default">
<field name="field_id" eval="ref('base.field_res_partner_state_id')"/>
<field name="field_id" eval="ref('base.field_res_partner__state_id')"/>
<field name="json_value" eval="ref('l10n_cn.state_GD')"/>
</record>
<!--设置默认时区为中国注意select 类型要加 ""-->
<record id="res_partner_tz_default" model="ir.default">
<field name="field_id" eval="ref('base.field_res_partner_tz')"/>
<field name="field_id" eval="ref('base.field_res_partner__tz')"/>
<field name="json_value">"Asia/Shanghai"</field>
</record>
<!--设置用户email在odoo内提醒-->
<record id="res_user_notify_email_default" model="ir.default">
<field name="field_id" eval="ref('mail.field_res_users_notification_type')"/>
<field name="field_id" eval="ref('mail.field_res_users__notification_type')"/>
<field name="json_value">"inbox"</field>
</record>
<!--设置产品默认是可库存产品-->
<record id="product_template_type_default" model="ir.default">
<field name="field_id" eval="ref('product.field_product_template_type')"/>
<field name="field_id" eval="ref('product.field_product_template__type')"/>
<field name="json_value">"product"</field>
</record>
</data>

View File

@@ -4,22 +4,11 @@
<!--
Resource: product.uom.categ
-->
<record id="product.product_category_all" model="product.category">
<field name="name">全部</field>
</record>
<record id="product.product_category_1" model="product.category">
<field name="name">可销售</field>
</record>
<!--
Resource: product.uom
-->
<record id="product.product_uom_kgm" model="product.uom">
<field name="name">公斤</field>
</record>
<record id="product.product_uom_ton" model="product.uom">
<field name="name"></field>
</record>
<!--<record id="product.product_category_all" model="product.category">-->
<!--<field name="name">全部</field>-->
<!--</record>-->
<!--<record id="product.product_category_1" model="product.category">-->
<!--<field name="name">可销售</field>-->
<!--</record>-->
</data>
</odoo>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Price list -->
<record id="product.list0" model="product.pricelist">
<field name="currency_id" ref="base.CNY"/>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Country -->
<record id="base.cn" model="res.country">
<field name="address_format" eval="'%(country_name)s%(state_name)s%(city)s%(zip)s\n%(street)s\n%(street2)s'"/>
</record>
</data>
</odoo>

View File

@@ -15,13 +15,29 @@
# http://www.sunpop.cn/odoo10_developer_document_offline/
# description:
from odoo import api, SUPERUSER_ID
from odoo import api, SUPERUSER_ID, _
def pre_init_hook(cr):
"""
数据初始化,只在安装时执行,更新时不执行
"""
pass
def post_init_hook(cr, registry):
"""
数据初始化,只在安装后执行,更新时不执行
"""
try:
env = api.Environment(cr, SUPERUSER_ID, {})
# oname = env['product.category'].with_context(lang='zh_CN').browse(1).name
# if oname:
# env['product.category'].with_context(lang='zh_CN').browse(1).write({
# 'name': oname + 'sunpop.cn',
# })
# env['product.category'].with_context(lang='zh_CN').browse(1).write({
# 'name': oname,
# })
env['product.category'].with_context(lang='zh_CN').browse(1)._compute_complete_name()
pass
except Exception as e:
raise Warning(e)

View File

@@ -4,10 +4,10 @@
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0+e-20180915\n"
"Project-Id-Version: Odoo Server 12.0+e-20181122\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-11-04 16:22+0000\n"
"PO-Revision-Date: 2018-11-04 16:22+0000\n"
"POT-Creation-Date: 2018-11-27 17:02+0000\n"
"PO-Revision-Date: 2018-11-27 17:02+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
@@ -16,145 +16,82 @@ msgstr ""
"Plural-Forms: \n"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "(edit)"
msgstr "(编辑)"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "Address"
msgstr "地址"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "City"
msgstr "城市"
#. module: app_base_chinese
#: model:ir.actions.act_window,help:app_base_chinese.app_action_partner_customer_form
#: model:ir.actions.act_window,help:app_base_chinese.app_action_partner_form
#: model:ir.actions.act_window,help:app_base_chinese.app_action_partner_supplier_form
msgid "Click to add a contact in your address book."
msgstr "点击在你的地址簿添加联系人。"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Companies"
msgstr "公司"
#. module: app_base_chinese
#: model:ir.model,name:app_base_chinese.model_res_partner
msgid "Contact"
msgstr "联系人"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "Country"
msgstr "国家/地区"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_kanban_view
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_res_partner_kanban_view
msgid "Credit"
msgstr "信额度"
msgstr "信额度"
#. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_customer_form
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_customer_tree
msgid "Customers"
msgstr "客户"
#: model:ir.model,name:app_base_chinese.model_res_partner_category
msgid "Partner Tags"
msgstr "业务伙伴标签"
#. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_employee_form
msgid "Employees"
msgstr "员工"
#: model:ir.model.fields,field_description:app_base_chinese.field_res_partner_category__sequence
msgid "Sequence"
msgstr "序号"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Group By"
msgstr "分组"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "My Partners"
msgstr "我的业务伙伴"
#. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_other_form
msgid "Other Partners"
msgstr "其它业务伙伴"
#. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_form
msgid "Partner"
msgstr "合作伙伴"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Persons"
msgstr "个人"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Salesperson"
msgstr "销售员"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Search Partner"
msgstr "搜索业务伙伴"
#. module: app_base_chinese
#: model:ir.model.fields,field_description:app_base_chinese.field_res_partner_short_name
#: model:ir.model.fields,field_description:app_base_chinese.field_res_users_short_name
#: model:ir.model.fields,field_description:app_base_chinese.field_res_partner__short_name
msgid "Short Name"
msgstr "简称"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "State"
msgstr "州/省"
msgstr "省"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "Street..."
msgstr "街道..."
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer
msgid "Tag"
msgstr "标签"
#: model:ir.model.fields,help:app_base_chinese.field_res_partner_category__sequence
msgid "Used to order partner category"
msgstr "显示排序"
#. module: app_base_chinese
#: code:addons/app_base_chinese/models/res_partner.py:14
#: sql_constraint:res.partner:0
#, python-format
msgid "The reference must be unique"
msgstr "编码必须唯一"
#. module: app_base_chinese
#: code:addons/app_base_chinese/models/res_partner.py:21
#, python-format
msgid "The reference must be unique!"
msgstr "编码必须唯一"
#. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_supplier_form
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_supplier_tree
msgid "Vendors"
msgstr "供应商"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "ZIP"
msgstr "邮"
msgstr "邮"
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "e.g. VIP001"
msgstr "例如 VIP001"
msgstr ""
#. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "手机:"
msgstr "手机:"
msgstr ""
#. module: app_base_chinese
#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "电话:"
msgstr ""

View File

@@ -1,6 +1,8 @@
# -*- coding: utf-8 -*-
from . import res_partner
from . import res_partner_category
from . import res_currency

View File

@@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models
class ResCurrency(models.Model):
_inherit = 'res.currency'
_order = 'active desc, sequence, name'
sequence = fields.Integer('Sequence', default=10, help="Determine the display order. Sort ascending.")
def rmb_upper(self, value):
"""
人民币大写
传入浮点类型的值返回 unicode 字符串
:param 传入阿拉伯数字
:return 返回值是对应阿拉伯数字的绝对值的中文数字
"""
if self.name != 'CNY':
return;
rmbmap = [u"", u"", u"", u"", u"", u"", u"", u"", u"", u""]
unit = [u"", u"", u"", u"", u"", u"", u"", u"", u"", u"", u"亿",
u"", u"", u"", u"", u"", u"", u"", u""]
# 冲红负数处理
xflag = 0
if value < 0:
xflag = value
value = abs(value)
# 先把value 数字进行格式化保留两位小数,转成字符串然后去除小数点
nums = map(int, list(str('%0.2f' % value).replace('.', '')))
words = []
zflag = 0 # 标记连续0次数以删除万字或适时插入零字
start = len(nums) - 3
for i in range(start, -3, -1): # 使i对应实际位数负数为角分
# 大部分情况对应数字不等于零 或者是刚开始循环
if 0 != nums[start - i] or len(words) == 0:
if zflag:
words.append(rmbmap[0])
zflag = 0
words.append(rmbmap[nums[start - i]]) # 数字对应的中文字符
words.append(unit[i + 2]) # 列表此位置的单位
# 控制‘万/元’ 万和元比较特殊如2拾万和2拾1万 无论有没有这个1 万字是必须的
elif 0 == i or (0 == i % 4 and zflag < 3):
# 上面那种情况定义了 2拾1万 的显示 这个是特殊对待的 2拾万一类的显示
words.append(unit[i + 2])
# 元(控制条件为 0 == i )和万(控制条为(0 == i % 4 and zflag < 3))的情况的处理是一样的
zflag = 0
else:
zflag += 1
if words[-1] != unit[0]: # 结尾非‘分’补整字 最小单位 如果最后一个字符不是最小单位(分)则要加一个整字
words.append(u"")
if xflag < 0: # 如果为负数则要在数字前面加上‘负’字
words.insert(0, u"")
return ''.join(words)

View File

@@ -9,26 +9,16 @@ class ResPartner(models.Model):
short_name = fields.Char('Short Name') # 简称
# ref编码限制在 app_partner_auto_reference
# 显示[编码]简称
@api.multi
def name_get(self):
result = []
for partner in self:
if partner.short_name:
name = partner.short_name
else:
name = partner.name
if partner.ref:
name = '[' + partner.ref + ']' + name
result.append((partner.id, name))
return result
class PartnerCategory(models.Model):
_inherit = 'res.partner.category'
_order = 'sequence, name'
sequence = fields.Integer('Sequence', help="Used to order partner category")
# 增加地址显示中的手机号与电话号码
# 选项 show_address 开启则增加显示手机与电话号
def _get_name(self):
name = super(ResPartner, self)._get_name() or ''
partner = self
if self._context.get('show_address'):
if partner.mobile and partner.phone:
name = name + "\n" + partner.mobile + "," + partner.phone
elif partner.mobile:
name = name + "\n" + partner.mobile
elif partner.phone:
name = name + "\n" + partner.phone
return name

View File

@@ -0,0 +1,9 @@
# -*- coding: utf-8 -*-
from odoo import api, models, fields, _
class PartnerCategory(models.Model):
_inherit = 'res.partner.category'
_order = 'sequence, name'
sequence = fields.Integer('Sequence', help="Used to order partner category")

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

View File

@@ -4,7 +4,7 @@
<h2 class="oe_slogan">App base chinese. Local customize for china user </h2>
<h3 class="oe_slogan">Set all chinese default value. Like Default country, timezone, currency, partner... </h3>
<div class="oe_row">
<h3>Lastest update: v11.0.11.07, 2018-11-07</h3>
<h3>Lastest update: v12.19.3.04</h3>
<div class="oe_span12">
<img class="oe_demo oe_picture oe_screenshot" src="banner.jpg">
</div>
@@ -24,17 +24,42 @@
<i class="fa fa-check-square-o text-primary"></i>
Set partner to chinese format.
</li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
Fix Category Display not in english bug.
</li>
</ul>
</div>
</div>
<div class="oe_span12">
<img class="oe_demo oe_picture oe_screenshot" src="demo1.jpg">
<img class="oe_demo oe_picture oe_screenshot" src="cnreadme.jpg">
</div>
</div>
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Set Default country, state, timezone, currency.</h4>
<div class="oe_demo oe_screenshot">
<img src="demo1.jpg">
</div>
<div class="oe_demo oe_screenshot">
<img src="demo2.jpg">
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<h4 class="oe_slogan">Fix Category Display not in english bug.</h4>
<div class="oe_demo oe_screenshot">
<img src="demo3.jpg">
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced text-center">
<div class="oe_span12">

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- currency视图, tree -->
<record id="app_view_currency_tree" model="ir.ui.view">
<field name="name">app.res.currency.tree</field>
<field name="model">res.currency</field>
<field name="inherit_id" ref="base.view_currency_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="before">
<field name="sequence" widget="handle"/>
</xpath>
</field>
</record>
<!-- currency视图, form -->
<record id="app_view_currency_form" model="ir.ui.view">
<field name="name">app.res.currency.form</field>
<field name="model">res.currency</field>
<field name="inherit_id" ref="base.view_currency_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='position']" position="after">
<field name="sequence"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- currency视图, tree -->
<record id="app_ir_default_tree_view" model="ir.ui.view">
<field name="name">app.ir.default tree view</field>
<field name="model">ir.default</field>
<field name="inherit_id" ref="base.ir_default_tree_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='json_value']" position="after">
<field name="condition"/>
</xpath>
</field>
</record>
<!-- currency视图, form -->
<record id="app_ir_default_form_view" model="ir.ui.view">
<field name="name">app.ir.default form view</field>
<field name="model">ir.default</field>
<field name="inherit_id" ref="base.ir_default_form_view"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='json_value']" position="after">
<field name="condition"/>
</xpath>
</field>
</record>
</data>
</odoo>

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="0">
<!-- Partner Form视图用继承方式改写2018-11-21,ivan -->
<!-- Partner tree视图用继承方式改写2018-11-21,ivan -->
<record id="app_view_partner_category_list" model="ir.ui.view">
<field name="name">app Contact Tags</field>
<field name="model">res.partner.category</field>

View File

@@ -7,39 +7,29 @@
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml">
<xpath expr="//page[@name='sales_purchases']//field[@name='ref']" position="replace">
</xpath>
<!-- 客户编号设计在重要位置在ui层必填其它联系人type时不需要填 2017-10-22 -->
<!-- 客户编号设计在重要位置,放到 app_partner_auto_reference -->
<!--<xpath expr="//field[@name='type']" position="after">-->
<!--<xpath expr="//field[@name='ref']" position="move"/>-->
<!--</xpath>-->
<xpath expr="//field[@name='type']" position="after">
<field name="ref" placeholder="e.g. VIP001" />
<field name="short_name"/>
</xpath>
<xpath expr="//field[@name='website']" position="attributes">
<attribute name="invisible">1</attribute>
<field name="short_name" invisible="1"/>
</xpath>
<!-- 信用额度 -->
<xpath expr="//field[@name='category_id']" position="after">
<field name="credit_limit"/>
</xpath>
<!--res.partner客户 地址中国化 -->
<xpath expr="//div[@class='o_address_format']" position="replace">
<div class="o_address_format">
<div class="oe_edit_only">
<button name="open_parent" type="object" string="(edit)" class="oe_link"
attrs="{'invisible': ['|', ('parent_id', '=', False), ('type', '!=', 'contact')]}"/>
</div>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}'
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}'
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" context="{'country_id': country_id, 'zip': zip}"/>
<field name="city" placeholder="City" class="o_address_city"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="street" placeholder="Street..." class="o_address_street"
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/>
<field name="street2" invisible="1"/>
</div>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='country_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='state_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='city']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='zip']" position="move"/>
</xpath>
<!-- res.partner联系人 form -->
<!-- 所有类型联系人默认都不是客户,不是供应商-->
@@ -54,118 +44,107 @@
<xpath expr="//notebook/page[1]" position="attributes">
<attribute name="attrs">{'invisible': [('is_company','!=', True)]}</attribute>
</xpath>
<!-- 所有类型联系人都要填姓名 -->
<xpath expr="//page//field[@name='child_ids']//form[1]//field[@name='name']" position="attributes">
<attribute name="required">1</attribute>
</xpath>
<!-- 联系人也显示地址,中国格式 -->
<xpath expr="//page//form[1]//group//group" position="replace">
<group attrs="">
<label for="street" string="Address"/>
<div>
<div class="o_address_format" name="div_address">
<field name="country_id" placeholder="Country" class="o_address_country"
options='{"no_open": True, "no_create": True}'/>
<field name="state_id" class="o_address_state" placeholder="State"
options='{"no_open": True}' context="{'country_id': country_id, 'zip': zip}"/>
<field name="city" placeholder="City" class="o_address_city"/>
<field name="zip" placeholder="ZIP" class="o_address_zip"/>
<field name="street" placeholder="Street..." class="o_address_street"/>
<field name="street2" invisible="1"/>
</div>
</div>
</group>
<!--res.partner客户 地址中国化 -->
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='street']" position="before">
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='country_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='street']" position="before">
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='state_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='street']" position="before">
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='city']" position="move"/>
</xpath>
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='street']" position="before">
<xpath expr="//field[@name='child_ids']//form[1]//field[@name='zip']" position="move"/>
</xpath>
<!-- res.partner联系人 kanban -->
<!-- 显示类型和地址等 -->
<xpath expr="//page//kanban[1]//templates//div[@class='oe_kanban_details']" position="replace">
<div class="oe_kanban_details">
<div>
[<field name="ref"/>]
<strong>
<field name="name"/>
</strong>
</div>
<div>
<field name="type"/>
</div>
<div t-if="record.function.raw_value">
<field name="function"/>
</div>
<div t-if="record.email.raw_value">
<field name="email"/>
</div>
<div>
<field t-if="record.state_id.raw_value" name="state_id"/>
<div>
<field name="city"/>
<field name="street"/>
<field name="zip" invisible="1"/>
</div>
</div>
<div t-if="record.phone.raw_value">电话:
<field name="phone"/>
</div>
<div t-if="record.mobile.raw_value">手机:
<field name="mobile"/>
</div>
</div>
<xpath expr="//field[@name='child_ids']//kanban[1]//templates//field[@name='name']" position="before">
<t t-if="record.ref.raw_value">[<field name="ref"/>]</t>
</xpath>
<xpath expr="//field[@name='child_ids']//kanban[1]//templates//field[@name='name']" position="after">
<div t-if="record.type.raw_value"><field name="type"/></div>
</xpath>
</field>
</record>
<!--res.partner open地址中国化 -->
<record id="app_view_partner_address_form" model="ir.ui.view">
<field name="name">app.res.partner.form.address</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_address_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='country_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='state_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='city']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='zip']" position="move"/>
</xpath>
</field>
</record>
<!--res.partner open地址中国化 -->
<record id="app_view_partner_short_form" model="ir.ui.view">
<field name="name">app.res.partner.form</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_short_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='country_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='state_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='city']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='zip']" position="move"/>
</xpath>
</field>
</record>
<!--res.partner 私人地址中国化 -->
<record id="app_res_partner_view_form_private" model="ir.ui.view">
<field name="name">app.res.partner.view.form.private</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.res_partner_view_form_private"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='country_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='state_id']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='city']" position="move"/>
</xpath>
<xpath expr="//field[@name='street']" position="before">
<xpath expr="//field[@name='zip']" position="move"/>
</xpath>
</field>
</record>
<!-- Partner tree 视图,公用的,暂时没用 -->
<record id="app_view_partner_tree" model="ir.ui.view">
<field name="name">app.res.partner.tree</field>
<field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='phone']" position="before">
<field name="short_name"/>
<field name="ref"/>
<field name="mobile"/>
</xpath>
<xpath expr="//field[@name='email']" position="after">
<field name="state_id"/>
<field name="city"/>
<field name="street"/>
<field name="category_id"/>
</xpath>
<xpath expr="//field[@name='user_id']" position="attributes">
<attribute name="invisible">0</attribute>
</xpath>
</field>
</record>
<!-- Partner customer tree 视图-->
<record id="app_view_partner_customer_tree" model="ir.ui.view">
<field name="name">app.res.partner.tree</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<tree string="Customers">
<!--<field name="sale_type"/>-->
<field name="display_name"/>
<field name="ref"/>
<field name="short_name"/>
<field name="mobile"/>
<field name="state_id"/>
<field name="city"/>
<field name="street"/>
<field name="credit_limit"/>
</tree>
</field>
</record>
<!-- Partner supplier tree 视图-->
<record id="app_view_partner_supplier_tree" model="ir.ui.view">
<field name="name">app.res.partner.tree</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<tree string="Vendors">
<field name="display_name"/>
<field name="short_name"/>
<field name="ref"/>
<field name="mobile"/>
<field name="phone"/>
<field name="email"/>
<field name="state_id"/>
<field name="city"/>
</tree>
</field>
</record>
@@ -190,147 +169,9 @@
</record>
<!--end客户-->
<!-- 为客户菜单单独增加筛选器 2017-11-13 -->
<record id="app_res_partner_view_filter_customer" model="ir.ui.view">
<field name="name">app.res.partner.select.customer</field>
<field name="model">res.partner</field>
<field name="arch" type="xml">
<search string="Search Partner">
<field name="name"
filter_domain="['|','|',('display_name','ilike',self),('ref','=',self),('email','ilike',self)]"/>
<!-- 添加手机号查询客户功能 2017-11-13 -->
<field name="mobile"/>
<filter help="My Partners" domain="[('user_id','=',uid)]"/>
<separator/>
<filter string="Persons" name="type_person" domain="[('is_company','=',0)]"/>
<filter string="Companies" name="type_company" domain="[('is_company','=',1)]"/>
<separator/>
<field name="category_id" string="Tag" filter_domain="[('category_id','ilike', self)]"/>
<field name="user_id"/>
<field name="parent_id" domain="[('is_company','=',1)]" operator="child_of"/>
<group expand="0" name="group_by" string="Group By">
<filter name="salesperson" string="Salesperson" domain="[]" context="{'group_by' : 'user_id'}"/>
<filter string="City" context="{'group_by': 'city'}"/>
<!-- 不需要按国家分组 -->
<!-- <filter string="Country" context="{'group_by': 'country_id'}"/> -->
</group>
</search>
</field>
</record>
<record id="app_action_partner_customer_form" model="ir.actions.act_window">
<field name="name">Customers</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_mode">kanban,tree,form</field>
<!-- domain客户 2017-11-19 -->
<field name="domain">[('customer', '=', 1),('is_company', '=', 1)]</field>
<field name="context">{'default_customer':1,'default_is_company':1}</field>
<!-- 指定独立筛选器 2017-11-14 -->
<field name="search_view_id" ref="app_res_partner_view_filter_customer"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a contact in your address book.
</p>
<p>
Odoo helps you easily track all activities related to
a customer: discussions, history of business opportunities,
documents, etc.
</p>
</field>
</record>
<record id="app_action_customer_form_view1" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="base.res_partner_kanban_view"/>
<field name="act_window_id" ref="app_action_partner_customer_form"/>
</record>
<record id="app_action_customer_form_view2" model="ir.actions.act_window.view">
<field name="sequence" eval="2"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="app_view_partner_customer_tree"/>
<field name="act_window_id" ref="app_action_partner_customer_form"/>
</record>
<!--end客户-->
<!-- 为供应商菜单单独增加筛选器 2017-11-13 -->
<record id="app_action_partner_supplier_form" model="ir.actions.act_window">
<field name="name">Vendors</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain">[('supplier', '=', 1),('is_company', '=', 1)]</field>
<field name="context">{'default_supplier': 1,'default_is_company':1}</field>
<field name="filter" eval="True"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a contact in your address book.
</p>
<p>
Odoo helps you easily track all activities related to
a supplier: discussions, history of purchases,
documents, etc.
</p>
</field>
</record>
<record id="app_action_supplier_form_view1" model="ir.actions.act_window.view">
<field name="sequence" eval="1"/>
<field name="view_mode">kanban</field>
<field name="view_id" ref="base.res_partner_kanban_view"/>
<field name="act_window_id" ref="app_action_partner_supplier_form"/>
</record>
<record id="app_action_supplier_form_view2" model="ir.actions.act_window.view">
<field name="sequence" eval="2"/>
<field name="view_mode">tree</field>
<field name="view_id" ref="app_view_partner_supplier_tree"/>
<field name="act_window_id" ref="app_action_partner_supplier_form"/>
</record>
<!--end供应商-->
<!-- 所有合作伙伴 2017-11-13 -->
<record id="app_action_partner_form" model="ir.actions.act_window">
<field name="name">Partner</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,tree,form</field>
<field name="domain"></field>
<field name="context">{'default_customer': 0,'default_supplier': 0,'default_is_company':1}</field>
<field name="filter" eval="True"/>
<field name="view_id" ref="base.res_partner_kanban_view"/>
<field name="help" type="html">
<p class="oe_view_nocontent_create">
Click to add a contact in your address book.
</p>
<p>
Odoo helps you easily track all activities related to
a supplier: discussions, history of purchases,
documents, etc.
</p>
</field>
</record>
<record id="app_action_partner_employee_form" model="ir.actions.act_window">
<field name="name">Employees</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="domain">[('employee','=',1)]</field>
<field name="context">{'default_customer':0, 'default_supplier':0 , 'default_employee':1}</field>
<field name="filter" eval="True"/>
</record>
<record id="app_action_partner_other_form" model="ir.actions.act_window">
<field name="name">Other Partners</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">res.partner</field>
<field name="view_type">form</field>
<field name="domain">[('supplier','&lt;&gt;',1),('customer','&lt;&gt;',1)]</field>
<field name="filter" eval="True"/>
</record>
</data>
</odoo>