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 -*- # -*- coding: utf-8 -*-
from .hooks import pre_init_hook from .hooks import pre_init_hook
from .hooks import post_init_hook
from . import controllers from . import controllers
from . import models from . import models
from . import ir from . import ir

View File

@@ -18,7 +18,7 @@
{ {
'name': "App base chinese中国化基本模块增强", 'name': "App base chinese中国化基本模块增强",
'version': '11.0.10.31', 'version': '11.19.03.04',
'author': 'Sunpop.cn', 'author': 'Sunpop.cn',
'category': 'Base', 'category': 'Base',
'website': 'http://www.sunpop.cn', 'website': 'http://www.sunpop.cn',
@@ -34,11 +34,16 @@
odoo Chinese Enhance. 中国化增强-基础 odoo Chinese Enhance. 中国化增强-基础
1. 中文默认值,如国家、时区、货币等。处理模块 base, product. 1. 中文默认值,如国家、时区、货币等。处理模块 base, product.
2. 客户加简称,地址显示中文化,客户编码显示优先 2. 客户加简称,地址显示中文化,客户编码显示优先
3. todo:中文演示数据(只有demo模式才加载) 3. 客户地址显示增加手机号与电话号码
4. 货币处理,增加排序显示
5. 修正产品类别的列表及m2o字段中不显示中文目录名的Bug
11. todo:中文演示数据(只有demo模式才加载)
""", """,
'pre_init_hook': 'pre_init_hook', 'pre_init_hook': 'pre_init_hook',
'post_init_hook': 'post_init_hook',
'depends': [ 'depends': [
'base',
'product', 'product',
'l10n_cn' 'l10n_cn'
], ],
@@ -46,11 +51,15 @@
'data': [ 'data': [
'views/res_partner_category_views.xml', 'views/res_partner_category_views.xml',
'views/res_partner_views.xml', 'views/res_partner_views.xml',
'views/res_currency_views.xml',
'views/ir_default_views.xml',
'data/ir_default_data.xml', 'data/ir_default_data.xml',
'data/ir_sequence_data.xml', 'data/ir_sequence_data.xml',
'data/base_data.xml', 'data/base_data.xml',
'data/res_country_data.xml',
'data/res_currency_data.xml', 'data/res_currency_data.xml',
'data/product_data.xml', 'data/product_data.xml',
'data/product_pricelist_data.xml',
], ],
'demo': [ 'demo': [
], ],
@@ -64,5 +73,5 @@
], ],
'installable': True, 'installable': True,
'application': 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"> <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')"/> <field name="json_value" eval="ref('base.cn')"/>
</record> </record>
<!--设置客户默认省为广东--> <!--设置客户默认省为广东-->
<record id="res_partner_state_id_default" model="ir.default"> <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')"/> <field name="json_value" eval="ref('l10n_cn.state_GD')"/>
</record> </record>
<!--设置默认时区为中国注意select 类型要加 ""--> <!--设置默认时区为中国注意select 类型要加 ""-->
<record id="res_partner_tz_default" model="ir.default"> <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> <field name="json_value">"Asia/Shanghai"</field>
</record> </record>
<!--设置用户email在odoo内提醒--> <!--设置用户email在odoo内提醒-->
<record id="res_user_notify_email_default" model="ir.default"> <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> <field name="json_value">"inbox"</field>
</record> </record>
<!--设置产品默认是可库存产品--> <!--设置产品默认是可库存产品-->
<record id="product_template_type_default" model="ir.default"> <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> <field name="json_value">"product"</field>
</record> </record>
</data> </data>

View File

@@ -4,22 +4,11 @@
<!-- <!--
Resource: product.uom.categ Resource: product.uom.categ
--> -->
<record id="product.product_category_all" model="product.category"> <!--<record id="product.product_category_all" model="product.category">-->
<field name="name">全部</field> <!--<field name="name">全部</field>-->
</record> <!--</record>-->
<record id="product.product_category_1" model="product.category"> <!--<record id="product.product_category_1" model="product.category">-->
<field name="name">可销售</field> <!--<field name="name">可销售</field>-->
</record> <!--</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>
</data> </data>
</odoo> </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/ # http://www.sunpop.cn/odoo10_developer_document_offline/
# description: # description:
from odoo import api, SUPERUSER_ID from odoo import api, SUPERUSER_ID, _
def pre_init_hook(cr): def pre_init_hook(cr):
""" """
数据初始化,只在安装时执行,更新时不执行 数据初始化,只在安装时执行,更新时不执行
""" """
pass
def post_init_hook(cr, registry):
"""
数据初始化,只在安装后执行,更新时不执行
"""
try: 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 pass
except Exception as e: except Exception as e:
raise Warning(e) raise Warning(e)

View File

@@ -4,10 +4,10 @@
# #
msgid "" msgid ""
msgstr "" 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" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-11-04 16:22+0000\n" "POT-Creation-Date: 2018-11-27 17:02+0000\n"
"PO-Revision-Date: 2018-11-04 16:22+0000\n" "PO-Revision-Date: 2018-11-27 17:02+0000\n"
"Last-Translator: <>\n" "Last-Translator: <>\n"
"Language-Team: \n" "Language-Team: \n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@@ -16,145 +16,82 @@ msgstr ""
"Plural-Forms: \n" "Plural-Forms: \n"
#. module: app_base_chinese #. 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)" msgid "(edit)"
msgstr "(编辑)" msgstr "(编辑)"
#. module: app_base_chinese #. 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" msgid "Address"
msgstr "地址" msgstr "地址"
#. module: app_base_chinese #. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer #: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
msgid "City" msgid "City"
msgstr "城市" 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 #. module: app_base_chinese
#: model:ir.model,name:app_base_chinese.model_res_partner #: model:ir.model,name:app_base_chinese.model_res_partner
msgid "Contact" msgid "Contact"
msgstr "联系人" msgstr "联系人"
#. module: app_base_chinese #. 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" msgid "Country"
msgstr "国家/地区" msgstr "国家/地区"
#. module: app_base_chinese #. 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" msgid "Credit"
msgstr "信额度" msgstr "信额度"
#. module: app_base_chinese #. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_customer_form #: model:ir.model,name:app_base_chinese.model_res_partner_category
#: model:ir.ui.view,arch_db:app_base_chinese.app_view_partner_customer_tree msgid "Partner Tags"
msgid "Customers" msgstr "业务伙伴标签"
msgstr "客户"
#. module: app_base_chinese #. module: app_base_chinese
#: model:ir.actions.act_window,name:app_base_chinese.app_action_partner_employee_form #: model:ir.model.fields,field_description:app_base_chinese.field_res_partner_category__sequence
msgid "Employees" msgid "Sequence"
msgstr "员工" msgstr "序号"
#. module: app_base_chinese #. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer #: model:ir.model.fields,field_description:app_base_chinese.field_res_partner__short_name
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
msgid "Short Name" msgid "Short Name"
msgstr "简称" msgstr "简称"
#. module: app_base_chinese #. 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" msgid "State"
msgstr "州/省" msgstr "省"
#. module: app_base_chinese #. 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..." msgid "Street..."
msgstr "街道..." msgstr "街道..."
#. module: app_base_chinese #. module: app_base_chinese
#: model:ir.ui.view,arch_db:app_base_chinese.app_res_partner_view_filter_customer #: model:ir.model.fields,help:app_base_chinese.field_res_partner_category__sequence
msgid "Tag" msgid "Used to order partner category"
msgstr "标签" msgstr "显示排序"
#. module: app_base_chinese #. module: app_base_chinese
#: code:addons/app_base_chinese/models/res_partner.py:14 #: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_partner_form
#: 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
msgid "ZIP" msgid "ZIP"
msgstr "邮" msgstr "邮"
#. module: app_base_chinese #. 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" msgid "e.g. VIP001"
msgstr "例如 VIP001" msgstr ""
#. module: app_base_chinese #. 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 "手机:" 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 -*- # -*- coding: utf-8 -*-
from . import res_partner 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') # 简称 short_name = fields.Char('Short Name') # 简称
# ref编码限制在 app_partner_auto_reference # 增加地址显示中的手机号与电话号码
# 显示[编码]简称 # 选项 show_address 开启则增加显示手机与电话号
@api.multi def _get_name(self):
def name_get(self): name = super(ResPartner, self)._get_name() or ''
result = [] partner = self
for partner in self: if self._context.get('show_address'):
if partner.short_name: if partner.mobile and partner.phone:
name = partner.short_name name = name + "\n" + partner.mobile + "," + partner.phone
else: elif partner.mobile:
name = partner.name name = name + "\n" + partner.mobile
if partner.ref: elif partner.phone:
name = '[' + partner.ref + ']' + name name = name + "\n" + partner.phone
result.append((partner.id, name)) return name
return result
class PartnerCategory(models.Model):
_inherit = 'res.partner.category'
_order = 'sequence, name'
sequence = fields.Integer('Sequence', help="Used to order partner category")

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> <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> <h3 class="oe_slogan">Set all chinese default value. Like Default country, timezone, currency, partner... </h3>
<div class="oe_row"> <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"> <div class="oe_span12">
<img class="oe_demo oe_picture oe_screenshot" src="banner.jpg"> <img class="oe_demo oe_picture oe_screenshot" src="banner.jpg">
</div> </div>
@@ -24,17 +24,42 @@
<i class="fa fa-check-square-o text-primary"></i> <i class="fa fa-check-square-o text-primary"></i>
Set partner to chinese format. Set partner to chinese format.
</li> </li>
<li>
<i class="fa fa-check-square-o text-primary"></i>
Fix Category Display not in english bug.
</li>
</ul> </ul>
</div> </div>
</div> </div>
<div class="oe_span12"> <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>
</div> </div>
</div> </div>
</section> </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"> <section class="oe_container oe_dark">
<div class="oe_row oe_spaced text-center"> <div class="oe_row oe_spaced text-center">
<div class="oe_span12"> <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"?> <?xml version="1.0" encoding="utf-8"?>
<odoo> <odoo>
<data noupdate="0"> <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"> <record id="app_view_partner_category_list" model="ir.ui.view">
<field name="name">app Contact Tags</field> <field name="name">app Contact Tags</field>
<field name="model">res.partner.category</field> <field name="model">res.partner.category</field>

View File

@@ -7,39 +7,29 @@
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_form"/> <field name="inherit_id" ref="base.view_partner_form"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//page[@name='sales_purchases']//field[@name='ref']" position="replace"> <!-- 客户编号设计在重要位置,放到 app_partner_auto_reference -->
</xpath> <!--<xpath expr="//field[@name='type']" position="after">-->
<!-- 客户编号设计在重要位置在ui层必填其它联系人type时不需要填 2017-10-22 --> <!--<xpath expr="//field[@name='ref']" position="move"/>-->
<!--</xpath>-->
<xpath expr="//field[@name='type']" position="after"> <xpath expr="//field[@name='type']" position="after">
<field name="ref" placeholder="e.g. VIP001" /> <field name="short_name" invisible="1"/>
<field name="short_name"/>
</xpath>
<xpath expr="//field[@name='website']" position="attributes">
<attribute name="invisible">1</attribute>
</xpath> </xpath>
<!-- 信用额度 --> <!-- 信用额度 -->
<xpath expr="//field[@name='category_id']" position="after"> <xpath expr="//field[@name='category_id']" position="after">
<field name="credit_limit"/> <field name="credit_limit"/>
</xpath> </xpath>
<!--res.partner客户 地址中国化 --> <!--res.partner客户 地址中国化 -->
<xpath expr="//div[@class='o_address_format']" position="replace"> <xpath expr="//field[@name='street']" position="before">
<div class="o_address_format"> <xpath expr="//field[@name='country_id']" position="move"/>
<div class="oe_edit_only"> </xpath>
<button name="open_parent" type="object" string="(edit)" class="oe_link" <xpath expr="//field[@name='street']" position="before">
attrs="{'invisible': ['|', ('parent_id', '=', False), ('type', '!=', 'contact')]}"/> <xpath expr="//field[@name='state_id']" position="move"/>
</div> </xpath>
<field name="country_id" placeholder="Country" class="o_address_country" options='{"no_open": True, "no_create": True}' <xpath expr="//field[@name='street']" position="before">
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}"/> <xpath expr="//field[@name='city']" position="move"/>
<field name="state_id" class="o_address_state" placeholder="State" options='{"no_open": True}' </xpath>
attrs="{'readonly': [('type', '=', 'contact'),('parent_id', '!=', False)]}" context="{'country_id': country_id, 'zip': zip}"/> <xpath expr="//field[@name='street']" position="before">
<field name="city" placeholder="City" class="o_address_city" <xpath expr="//field[@name='zip']" position="move"/>
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> </xpath>
<!-- res.partner联系人 form --> <!-- res.partner联系人 form -->
<!-- 所有类型联系人默认都不是客户,不是供应商--> <!-- 所有类型联系人默认都不是客户,不是供应商-->
@@ -54,118 +44,107 @@
<xpath expr="//notebook/page[1]" position="attributes"> <xpath expr="//notebook/page[1]" position="attributes">
<attribute name="attrs">{'invisible': [('is_company','!=', True)]}</attribute> <attribute name="attrs">{'invisible': [('is_company','!=', True)]}</attribute>
</xpath> </xpath>
<!-- 联系人也显示地址,中国格式 --> <!-- 所有类型联系人都要填姓名 -->
<xpath expr="//page//form[1]//group//group" position="replace"> <xpath expr="//page//field[@name='child_ids']//form[1]//field[@name='name']" position="attributes">
<group attrs=""> <attribute name="required">1</attribute>
<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>
</xpath> </xpath>
<!-- 联系人也显示地址,中国格式 -->
<!--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 --> <!-- res.partner联系人 kanban -->
<!-- 显示类型和地址等 --> <!-- 显示类型和地址等 -->
<xpath expr="//page//kanban[1]//templates//div[@class='oe_kanban_details']" position="replace"> <xpath expr="//field[@name='child_ids']//kanban[1]//templates//field[@name='name']" position="before">
<div class="oe_kanban_details"> <t t-if="record.ref.raw_value">[<field name="ref"/>]</t>
<div> </xpath>
[<field name="ref"/>] <xpath expr="//field[@name='child_ids']//kanban[1]//templates//field[@name='name']" position="after">
<strong> <div t-if="record.type.raw_value"><field name="type"/></div>
<field name="name"/> </xpath>
</strong> </field>
</div> </record>
<div>
<field name="type"/> <!--res.partner open地址中国化 -->
</div> <record id="app_view_partner_address_form" model="ir.ui.view">
<div t-if="record.function.raw_value"> <field name="name">app.res.partner.form.address</field>
<field name="function"/> <field name="model">res.partner</field>
</div> <field name="inherit_id" ref="base.view_partner_address_form"/>
<div t-if="record.email.raw_value"> <field name="arch" type="xml">
<field name="email"/> <xpath expr="//field[@name='street']" position="before">
</div> <xpath expr="//field[@name='country_id']" position="move"/>
<div> </xpath>
<field t-if="record.state_id.raw_value" name="state_id"/> <xpath expr="//field[@name='street']" position="before">
<div> <xpath expr="//field[@name='state_id']" position="move"/>
<field name="city"/> </xpath>
<field name="street"/> <xpath expr="//field[@name='street']" position="before">
<field name="zip" invisible="1"/> <xpath expr="//field[@name='city']" position="move"/>
</div> </xpath>
</div> <xpath expr="//field[@name='street']" position="before">
<div t-if="record.phone.raw_value">电话: <xpath expr="//field[@name='zip']" position="move"/>
<field name="phone"/> </xpath>
</div> </field>
<div t-if="record.mobile.raw_value">手机: </record>
<field name="mobile"/> <!--res.partner open地址中国化 -->
</div> <record id="app_view_partner_short_form" model="ir.ui.view">
</div> <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> </xpath>
</field> </field>
</record> </record>
<!-- Partner tree 视图,公用的,暂时没用 -->
<record id="app_view_partner_tree" model="ir.ui.view"> <record id="app_view_partner_tree" model="ir.ui.view">
<field name="name">app.res.partner.tree</field> <field name="name">app.res.partner.tree</field>
<field name="model">res.partner</field> <field name="model">res.partner</field>
<field name="inherit_id" ref="base.view_partner_tree"/> <field name="inherit_id" ref="base.view_partner_tree"/>
<field name="arch" type="xml"> <field name="arch" type="xml">
<xpath expr="//field[@name='phone']" position="before"> <xpath expr="//field[@name='phone']" position="before">
<field name="short_name"/>
<field name="ref"/>
<field name="mobile"/> <field name="mobile"/>
</xpath> </xpath>
<xpath expr="//field[@name='email']" position="after"> <xpath expr="//field[@name='email']" position="after">
<field name="state_id"/> <field name="category_id"/>
<field name="city"/>
<field name="street"/>
</xpath> </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> </field>
</record> </record>
@@ -190,147 +169,9 @@
</record> </record>
<!--end客户--> <!--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 --> <!-- 为供应商菜单单独增加筛选器 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供应商--> <!--end供应商-->
<!-- 所有合作伙伴 2017-11-13 --> <!-- 所有合作伙伴 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> </data>
</odoo> </odoo>