update misc

This commit is contained in:
Ivan Office
2023-09-13 04:18:03 +08:00
parent 4f1539c2a1
commit d911f67b15
5 changed files with 67 additions and 46 deletions

View File

@@ -5,4 +5,4 @@ from .hooks import post_init_hook
from . import controllers from . import controllers
from . import models from . import models
from . import ir from . import ir
from . import res from . import res

View File

@@ -45,7 +45,7 @@
'live_test_url': 'https://demo.odooapp.cn', 'live_test_url': 'https://demo.odooapp.cn',
'license': 'OPL-1', 'license': 'OPL-1',
'sequence': 2, 'sequence': 2,
'price': 98.00, 'price': 18.00,
'currency': 'EUR', 'currency': 'EUR',
'images': ['static/description/banner.png'], 'images': ['static/description/banner.png'],
'summary': ''' 'summary': '''

View File

@@ -13,44 +13,58 @@ class MixinNameEn(models.AbstractModel):
# name_en_US 只要某个模型有此字段,且放在界面上,就会进行此处理 # name_en_US 只要某个模型有此字段,且放在界面上,就会进行此处理
# 无此字段不处理 # 无此字段不处理
# 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
name_en_US = fields.Char('English Name') # 注意不能用在有继承的模型
# todo: 以下处理方式不同最好直接做一个widget name_en_US = fields.Char('English Name', compute='_compute_name_en_US', inverse='_inverse_name_en_US', store=True)
# 非开发者模式时,能显示出非英文时值,并可点击改多语种。
# 将原 widget加 options 处理 @api.depends('name')
@api.model_create_multi def _compute_name_en_US(self):
def create(self, vals_list): self = self.with_context(lang='en_US')
res = super(MixinNameEn, self).create(vals_list) for rec in self:
if self.env.lang == 'en_US': rec.name_en_US = rec.name
return res
def _inverse_name_en_US(self):
# todo: 这里已为了提高性能不检查。不需检查当前odoo是否有英文没英文就不给安装此模块。同时也不检查条件 for rec in self:
# if name_field and name_field.translate and name_field.type in ["char", "text"]: rec.with_context(lang='en_US').write({
# # todo: 符合条件,后续为提高性能,无需做此判断 'name': rec.name_en_US
# pass })
# else:
# return res # # todo: 以下处理方式不同最好直接做一个widget
# 处理写 en # # 非开发者模式时,能显示出非英文时值,并可点击改多语种。
for index, vals in enumerate(vals_list): # # 将原 widget加 options 处理
name_en_US = vals.get('name_en_US') # @api.model_create_multi
if name_en_US: # def create(self, vals_list):
try: # res = super(MixinNameEn, self).create(vals_list)
res[index].with_context(lang='en_US').write(dict(name=name_en_US)) # if self.env.lang == 'en_US':
except Exception as e: # return res
_logger.error('============== name_en mixin create error from name_en_US: %s' % str(e)) #
return res # # todo: 这里已为了提高性能不检查。不需检查当前odoo是否有英文没英文就不给安装此模块。同时也不检查条件
# # if name_field and name_field.translate and name_field.type in ["char", "text"]:
def write(self, vals): # # # todo: 符合条件,后续为提高性能,无需做此判断
res = super(MixinNameEn, self).write(vals) # # pass
if self.env.lang == 'en_US': # # else:
return res # # return res
# # 处理写 en
name_en_US = vals.get('name_en_US') # for index, vals in enumerate(vals_list):
name = vals.get('name') # name_en_US = vals.get('name_en_US')
if name_en_US: # if name_en_US:
try: # try:
self.with_context(lang='en_US').write(dict(name=name_en_US)) # res[index].with_context(lang='en_US').write(dict(name=name_en_US))
except Exception as e: # except Exception as e:
_logger.error('============== name_en mixin write error:%s' % str(e)) # _logger.error('============== name_en mixin create error from name_en_US: %s' % str(e))
return res # return res
#
# def write(self, vals):
# res = super(MixinNameEn, self).write(vals)
# if self.env.lang == 'en_US':
# return res
#
# name_en_US = vals.get('name_en_US')
# name = vals.get('name')
# if name_en_US:
# try:
# self.with_context(lang='en_US').write(dict(name=name_en_US))
# except Exception as e:
# _logger.error('============== name_en mixin write error:%s' % str(e))
# return res

View File

@@ -5,6 +5,13 @@ from odoo.exceptions import UserError, ValidationError
class ResPartner(models.Model): class ResPartner(models.Model):
_name = 'res.partner'
_inherit = 'res.partner'
_inherit = ['res.partner', 'mixin.name.en'] # todo: name 不能做多语种处理,使用高频,会太耗费性能
# 注意 res.partner 是很特殊的,继承太多,故不能用 translate=True
# name = fields.Char(translate=True)
name_en_US = fields.Char('English Name')

View File

@@ -8,7 +8,7 @@
<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="//field[@name='type']" position="after"> <xpath expr="//span[@name='address_name']" position="before">
<!-- todo: 在英文环境不显示xml中可以直接调 env。或者是在原widget中加options如果无值时则显示同样的 name--> <!-- todo: 在英文环境不显示xml中可以直接调 env。或者是在原widget中加options如果无值时则显示同样的 name-->
<field name="name_en_US" place_holder="Default same as name, Input to set other"/> <field name="name_en_US" place_holder="Default same as name, Input to set other"/>
</xpath> </xpath>