diff --git a/app_base_chinese/__init__.py b/app_base_chinese/__init__.py new file mode 100644 index 00000000..0190a7f5 --- /dev/null +++ b/app_base_chinese/__init__.py @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- + +from .hooks import pre_init_hook +from .hooks import post_init_hook +from . import controllers +from . import models +from . import ir +from . import res \ No newline at end of file diff --git a/app_base_chinese/__manifest__.py b/app_base_chinese/__manifest__.py new file mode 100644 index 00000000..1a2789b5 --- /dev/null +++ b/app_base_chinese/__manifest__.py @@ -0,0 +1,130 @@ +# -*- coding: utf-8 -*- + +# Created on 2023-02-02 +# author: 欧度智能,https://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# Odoo在线中文用户手册(长期更新) +# https://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# https://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# https://www.odooai.cn/odoo10_developer_document_offline/ +# description: + + +{ + 'name': 'odoo中文版套件之基础,中国会计基础,Chinese Enhance All in One,', + 'version': '17.23.08.03', + 'author': 'odooai.cn', + 'category': 'Base', + 'website': 'https://www.odooai.cn', + 'live_test_url': 'https://demo.odooapp.cn', + 'license': 'LGPL-3', + 'sequence': 2, + 'price': 0, + 'currency': 'EUR', + 'summary': ''' + odoo简体中文版全面增强. Chinese enhance. Out of the box use odoo in china. Chinese address format, number format, money format. + Set all chinese default value. Default country, timezone, currency, partner.中国会计基础模块. + ''', + 'description': ''' + odoo Chinese Enhance. odoo中国版增强-基础 + 1. 中文地址格式,适用于所有中国中文客户、供应商、合作伙伴、用户、员工信息等 + 2. 中文默认值,如国家、时区、货币等。处理模块 base, product. + 3. 客户加简称,地址显示中文化,客户编码显示优先 + 4. 客户地址显示增加手机号与电话号码 + 5. 货币处理,人民币增强,增加排序显示 + 6. 修正品类的列表及m2o字段中不显示中文目录名的Bug + 7. 修正仓库位置的列表及m2o字段中不显示中文目录名的Bug + 8. 超级用户改时区为 中国 + 9. 时间格式年月日为 中国格式,如 2023-08-08,时间为 12:34 + 10. 国家增加排序,中国排第一 + 11. 收款相关显示中国习惯 + 12. 翻译导出默认中文,默认po + 13. [默认已移除,可自行加载.py]在 base 模型增加 name_en_US 字段,赋值后同时改翻译值 + 14. 常用小数精度调整 + 15. 销售团队改为中国 + 16. 精简语言的显示,如 Chinese简体中文改为 中文 + 21. 多语言支持,多公司支持 + 22. Odoo 16,15,14,13,12, 企业版,社区版,在线SaaS.sh版,等全版本支持 + 23. 代码完全开源 + ====== + 1. Chinese address format, applicable to all Chinese customers, suppliers, partners, users, employee information etc. + 2. Default values in Chinese such as country, time zone and currency. Processing module base, product. + 3. Add customer abbreviation and display addresses in Chinese; prioritize displaying customer codes. + 4. Display phone numbers along with mobile numbers for customer addresses. + 5. Currency processing with added sorting display. + 6. Fixed bug where the category list and m2o field did not display the name of the Chinese directory. + 7. Fixed bug where warehouse location list and m2o field did not display the name of the Chinese directory. + 8. Superuser changed time zone to China. + 9. Date format is year-month-day (e.g., 2023-08-08) and time is 12:34 + 10.Country sorting added; China ranked first + 11.Display payment-related information according to typical practices in China. + 12.Default export translation is set to Mandarin (po). + 13.Added 'name_en_US' field in base model which updates translation value when assigned a value. + 14.Common decimal precision adjustments made. + 15.Sales team changed to [China]. + 21. Multi-language Support. Multi-Company Support. + 22. Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition. + 23. Full Open Source. + ''', + 'pre_init_hook': 'pre_init_hook', + 'post_init_hook': 'post_init_hook', + 'depends': [ + 'base_address_extended', + 'account', + 'sales_team', + 'sale', + 'stock', + 'app_odoo_customize', + ], + 'images': ['static/description/banner.jpg'], + 'data': [ + 'views/res_partner_views.xml', + 'views/res_currency_views.xml', + 'views/sale_order_views.xml', + 'views/account_move_views.xml', + 'views/ir_default_views.xml', + # 'views/templates.xml', + 'wizard/sale_make_invoice_advance_views.xml', + 'data/ir_default_data.xml', + 'data/base_data.xml', + 'data/decimal_precision_data.xml', + 'data/res_country_data.xml', + 'data/res_currency_data.xml', + 'data/res_lang_data.xml', + 'data/res_company_data.xml', + 'data/res_partner_data.xml', + 'data/res_users_data.xml', + 'data/product_data.xml', + 'data/product_pricelist_data.xml', + 'data/stock_location_data.xml', + 'data/sales_team_data.xml', + 'views/ir_module_module_views.xml', + ], + 'assets': { + 'web.assets_backend': [ + 'app_base_chinese/static/src/scss/app_style.scss', + ] + }, + 'demo': [ + 'data/res_company_demo.xml', + 'data/res_partner_demo.xml', + ], + 'test': [ + ], + 'css': [ + ], + 'qweb': [ + 'static/src/xml/*.xml', + ], + 'js': [ + ], + 'installable': True, + 'application': True, + 'auto_install': False, +} diff --git a/app_base_chinese/controllers/__init__.py b/app_base_chinese/controllers/__init__.py new file mode 100644 index 00000000..4e65ea1a --- /dev/null +++ b/app_base_chinese/controllers/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import database diff --git a/app_base_chinese/controllers/database.py b/app_base_chinese/controllers/database.py new file mode 100644 index 00000000..2c63da28 --- /dev/null +++ b/app_base_chinese/controllers/database.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- + +import os +import re +from lxml import html +import odoo +import odoo.modules.registry +from odoo import http +from odoo.exceptions import AccessError +from odoo.http import content_disposition, dispatch_rpc, request, Response +from odoo.service import db +from odoo.tools.misc import file_open, str2bool +from odoo.addons.web.controllers.database import Database as Database +from odoo.addons.base.models.ir_qweb import render as qweb_render + +DBNAME_PATTERN = '^[a-zA-Z0-9][a-zA-Z0-9_.-]+$' + + +class Database(Database): + + def _render_template(self, **d): + d.setdefault('manage', True) + d['insecure'] = odoo.tools.config.verify_admin_password('admin') + d['list_db'] = odoo.tools.config['list_db'] + d['langs'] = odoo.service.db.exp_list_lang() + d['countries'] = odoo.service.db.exp_list_countries() + d['pattern'] = DBNAME_PATTERN + # databases list + try: + d['databases'] = http.db_list() + d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases']) + except odoo.exceptions.AccessDenied: + d['databases'] = [request.db] if request.db else [] + + templates = {} + + with file_open("web/static/src/public/database_manager.qweb.html", "r") as fd: + templates['database_manager'] = fd.read() + with file_open("web/static/src/public/database_manager.master_input.qweb.html", "r") as fd: + templates['master_input'] = fd.read() + # with file_open("web/static/src/public/database_manager.create_form.qweb.html", "r") as fd: + with file_open("app_base_chinese/static/src/public/database_manager.create_form.qweb.html", "r") as fd: + templates['create_form'] = fd.read() + + def load(template_name): + fromstring = html.document_fromstring if template_name == 'database_manager' else html.fragment_fromstring + return (fromstring(templates[template_name]), template_name) + + return qweb_render('database_manager', d, load) diff --git a/app_base_chinese/data/base_data.xml b/app_base_chinese/data/base_data.xml new file mode 100644 index 00000000..20a79438 --- /dev/null +++ b/app_base_chinese/data/base_data.xml @@ -0,0 +1,19 @@ + + + + + + + 欧度智能 + + + + + 欧度智能 + + + + 超管 + + + diff --git a/app_base_chinese/data/crm_team_data.xml b/app_base_chinese/data/crm_team_data.xml new file mode 100644 index 00000000..19feb435 --- /dev/null +++ b/app_base_chinese/data/crm_team_data.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app_base_chinese/data/decimal_precision_data.xml b/app_base_chinese/data/decimal_precision_data.xml new file mode 100644 index 00000000..69354c37 --- /dev/null +++ b/app_base_chinese/data/decimal_precision_data.xml @@ -0,0 +1,14 @@ + + + + + 0 + + + 2 + + + 3 + + + \ No newline at end of file diff --git a/app_base_chinese/data/ir_default_data.xml b/app_base_chinese/data/ir_default_data.xml new file mode 100644 index 00000000..c6ffe1ab --- /dev/null +++ b/app_base_chinese/data/ir_default_data.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/app_base_chinese/data/product_data.xml b/app_base_chinese/data/product_data.xml new file mode 100644 index 00000000..23e21456 --- /dev/null +++ b/app_base_chinese/data/product_data.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/app_base_chinese/data/product_pricelist_data.xml b/app_base_chinese/data/product_pricelist_data.xml new file mode 100644 index 00000000..37c61161 --- /dev/null +++ b/app_base_chinese/data/product_pricelist_data.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/app_base_chinese/data/res_company_data.xml b/app_base_chinese/data/res_company_data.xml new file mode 100644 index 00000000..fc3f7dea --- /dev/null +++ b/app_base_chinese/data/res_company_data.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/app_base_chinese/data/res_country_data.xml b/app_base_chinese/data/res_country_data.xml new file mode 100644 index 00000000..6a046c5d --- /dev/null +++ b/app_base_chinese/data/res_country_data.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/app_base_chinese/data/res_currency_data.xml b/app_base_chinese/data/res_currency_data.xml new file mode 100644 index 00000000..d80d7862 --- /dev/null +++ b/app_base_chinese/data/res_currency_data.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + before + + + diff --git a/app_base_chinese/data/res_lang_data.xml b/app_base_chinese/data/res_lang_data.xml new file mode 100644 index 00000000..f91c7829 --- /dev/null +++ b/app_base_chinese/data/res_lang_data.xml @@ -0,0 +1,14 @@ + + + + + + 中文 + %Y-%m-%d + %H:%M:%S + + + English + + + diff --git a/app_base_chinese/data/res_partner_data.xml b/app_base_chinese/data/res_partner_data.xml new file mode 100644 index 00000000..df834a0e --- /dev/null +++ b/app_base_chinese/data/res_partner_data.xml @@ -0,0 +1,8 @@ + + + + + 公共访客用户 + + + diff --git a/app_base_chinese/data/res_users_data.xml b/app_base_chinese/data/res_users_data.xml new file mode 100644 index 00000000..a6732e1b --- /dev/null +++ b/app_base_chinese/data/res_users_data.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app_base_chinese/data/sales_team_data.xml b/app_base_chinese/data/sales_team_data.xml new file mode 100644 index 00000000..007a20fe --- /dev/null +++ b/app_base_chinese/data/sales_team_data.xml @@ -0,0 +1,11 @@ + + + + + 中国 + + + China + + + diff --git a/app_base_chinese/data/stock.location.csv b/app_base_chinese/data/stock.location.csv new file mode 100644 index 00000000..7c599d1d --- /dev/null +++ b/app_base_chinese/data/stock.location.csv @@ -0,0 +1,7 @@ +id,name +stock.stock_location_locations_partner,往来单位 +stock.stock_location_customers,客户区位 +stock.stock_location_suppliers,供应商区位 +stock.stock_location_locations,物理区位 +stock.stock_location_locations_virtual,虚拟区位 +stock.stock_location_inter_wh,内部中转区位 diff --git a/app_base_chinese/data/stock_location_data.xml b/app_base_chinese/data/stock_location_data.xml new file mode 100644 index 00000000..ec265243 --- /dev/null +++ b/app_base_chinese/data/stock_location_data.xml @@ -0,0 +1,51 @@ + + + + + 先进先出(FIFO) + + + 后进先出(LIFO) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_base_chinese/demo/base_demo.xml b/app_base_chinese/demo/base_demo.xml new file mode 100644 index 00000000..89c6ac05 --- /dev/null +++ b/app_base_chinese/demo/base_demo.xml @@ -0,0 +1,90 @@ + + + + + + Demo User + + + demo@yourcompany.example.com + YourCompany + Avenue des Dessus-de-Lives, 2 + Namur (Loyers) + 5101 + + + + + 60-16-13 31926819 + bank + + + + + YourCompany + YourCompany + 1725 Slough Ave. + Scranton + 18540 + + + +1 555 123 8069 + info@yourcompany.example.com + www.example.com + + + + + YourCompany + standard + + + + + demo + demo + --
+Mr Demo
+ + + +
+ + + YourCompany + 215 Vine St + Scranton + 18503 + + + +1 555-555-5555 + admin@yourcompany.example.com + Europe/Brussels + + + + + + + Demo Portal User + demo.portal@yourcompany.example.com + + + Vivegnis + 4683 + + YourCompany + Rue Cesar de Paepe, 43 + + + + portal + portal + --
Mr Demo Portal]]>
+ +
+ + + + +
+
diff --git a/app_base_chinese/demo/product_demo.xml b/app_base_chinese/demo/product_demo.xml new file mode 100644 index 00000000..2a8e9305 --- /dev/null +++ b/app_base_chinese/demo/product_demo.xml @@ -0,0 +1,738 @@ + + + + + + + Internal + + + + Services + + + + Software + + + + Physical + + + + Prepaid Consulting + + 40 + 90 + service + + + Example of product to invoice on order. + SERV_ORDER + + + + Cost-plus Contract + + 200.0 + 180.0 + service + + + SERV_DEL + + + + External Audit + + 160 + 180 + service + + + Example of products to invoice based on cost. + SERV_COST + + + + Switch, 24 ports + + 55.0 + 70.0 + consu + + + PROD_DEL + + + + Datacard + + 35.0 + 40.0 + consu + + + PROD_DEL02 + + + + Zed+ Antivirus + + 235.0 + 280.0 + consu + + + PROD_ORDER + + + + GAP Analysis Service + + 20.5 + 30.75 + service + + + Example of products to invoice based on delivery. + + + + Support Services + + 25.5 + 38.25 + service + + + Example of product to invoice based on delivery. + + + + + Computer SC234 + + 450.0 + 300.0 + consu + + + 17" LCD Monitor Processor AMD 8-Core + PCSC234 + + + + + + Memory + + + 16 GB + + + + 32 GB + + + + + Color + + + White + + + + Black + + + + + Wi-Fi + + + 2.4 GHz + + + + + iPad Retina Display + + 500.0 + 750.0 + consu + + + 7.9‑inch (diagonal) LED-backlit, 128Gb Dual-core A5 with quad-core graphics FaceTime HD Camera, 1.2 MP Photos + E-COM01 + + + + E-COM02 + + + + + E-COM03 + + + + + E-COM04 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 50.40 + + + + Bose Mini Bluetooth Speaker + + 140.0 + 247.0 + consu + + + Bose's smallest portable Bluetooth speaker + E-COM05 + + + + + Custom Computer (kit) + + 600.0 + 147.0 + consu + + + Custom computer shipped in kit. + E-COM06 + + + Parts Replacement + + 600.0 + 147.0 + service + + + + iPad Mini + + 800.0 + 320.0 + consu + + + E-COM07 + 0.330 + + + + Repair + + 800.0 + 320.0 + service + + + Apple In-Ear Headphones + + 70.0 + 79.0 + consu + + + E-COM08 + + + + iMac + + 1299.0 + 1799.0 + consu + + + E-COM09 + 9.54 + + + + Apple Wireless Keyboard + + 10.0 + 47.0 + consu + + + E-COM10 + + + + Mouse, Optical + + 12.50 + 14 + consu + + + E-COM11 + + + + iPod + + 14 + 16.50 + consu + + + E-COM12 + + + + E-COM13 + + + + + Cleaning + + 14 + 16.50 + service + + + + + + + + + + + + + + + + 6.40 + + + + + + Mouse, Wireless + + 18 + 12.50 + consu + + + M-Wir + + + + RAM SR5 + + 78.0 + 85.0 + consu + + + RAM-SR5 + + + + Computer Case + + 20.0 + 25.0 + consu + + + C-Case + + + + HDD SH-1 + + 860.0 + 975.0 + consu + + + HDD-SH1 + + + + Motherboard I9P57 + + 1700.0 + 1950.0 + consu + + + MBi9 + + + Processor Core i5 2.70 Ghz + + 2010.0 + 2100.0 + consu + + + CPUi5 + + + + Graphics Card + + 876.0 + 885.0 + consu + + + CARD + + + + Laptop E5023 + + 2870.0 + 2950.0 + consu + + + 17" Monitor, 4GB RAM Standard-1294P Processor + LAP-E5 + + + + Laptop Customized + + 3300.0 + 3645.0 + consu + + + Custom Laptop based on customer's requirement. + LAP-CUS + + + + Basic Computer + + 25000.0 + 23500.0 + consu + + + Dvorak keyboard left-handed mouse + CONS_DEL03 + + + + Little server + + 45000.0 + 40000.0 + consu + + + raid 1, 512ECC ram + CONS_DEL02 + + + + Server + + 65000.0 + 60000.0 + consu + + + raid 10, 2048ECC ram + CONS_DEL01 + + + + + + Gold Membership + 180 + + service + + + + + Silver Membership + + 80 + service + + + + + Basic Membership + + 40 + service + + + + + + + + + 3 + 1 + 750 + + + + + + 3 + 1 + 790 + + + + + + 3 + 3 + 785 + + + + + + 3 + 1 + 65 + + + + + + 3 + 1 + 72 + + + + + + 2 + 5 + 1299 + + + + + + 4 + 1 + 1399 + + + + + + 2 + 1 + 12.50 + + + + + + 2 + 1 + 14 + + + + + + 5 + 1 + 78 + + + + + + 1 + 1 + 20 + + + + + + 3 + 1 + 860 + + + + + + 3 + 1 + 1700 + + + + + + 4 + 5 + 1720 + + + + + + 3 + 1 + 2010 + + + + + + 3 + 1 + 876 + + + + + + 8 + 1 + 2870 + + + + + + 4 + 1 + 390 + + + + + + 2 + 12 + 90 + + + + + + 4 + 1 + 66 + + + + + + 5 + 1 + 35 + + + + + + 7 + 1 + 55 + + + + + + 4 + 0 + 10 + + + + + + 10 + 0 + 3300 + + + + + + 3 + 0 + 12.50 + + + + + + 2 + 0 + 13.50 + + + + property_product_pricelist + + + + + + + + diff --git a/app_base_chinese/demo/product_image_demo.xml b/app_base_chinese/demo/product_image_demo.xml new file mode 100644 index 00000000..ab98b4a7 --- /dev/null +++ b/app_base_chinese/demo/product_image_demo.xml @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_base_chinese/demo/res_bank_demo.xml b/app_base_chinese/demo/res_bank_demo.xml new file mode 100644 index 00000000..bd563fc6 --- /dev/null +++ b/app_base_chinese/demo/res_bank_demo.xml @@ -0,0 +1,21 @@ + + + + + + ING + BBRUBEBB + + + + Crelan + NICABEBB + + + + CBC + CREGBEBB + + + + diff --git a/app_base_chinese/demo/res_company_demo.xml b/app_base_chinese/demo/res_company_demo.xml new file mode 100644 index 00000000..801999c6 --- /dev/null +++ b/app_base_chinese/demo/res_company_demo.xml @@ -0,0 +1,8 @@ + + + + + odooAi欧度智能 + + + diff --git a/app_base_chinese/demo/res_partner_demo.xml b/app_base_chinese/demo/res_partner_demo.xml new file mode 100644 index 00000000..247ba9d4 --- /dev/null +++ b/app_base_chinese/demo/res_partner_demo.xml @@ -0,0 +1,11 @@ + + + + + + info@odooai.cn + www.odooai.cn + + + + diff --git a/app_base_chinese/demo/res_partner_image_demo.xml b/app_base_chinese/demo/res_partner_image_demo.xml new file mode 100644 index 00000000..9186c569 --- /dev/null +++ b/app_base_chinese/demo/res_partner_image_demo.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app_base_chinese/hooks.py b/app_base_chinese/hooks.py new file mode 100644 index 00000000..bacb9a69 --- /dev/null +++ b/app_base_chinese/hooks.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +# Created on 2017-11-22 +# author: 欧度智能,https://www.odooai.cn +# email: 300883@qq.com +# resource of odooai +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +# Odoo在线中文用户手册(长期更新) +# https://www.odooai.cn/documentation/user/10.0/zh_CN/index.html + +# Odoo10离线中文用户手册下载 +# https://www.odooai.cn/odoo10_user_manual_document_offline/ +# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备) +# https://www.odooai.cn/odoo10_developer_document_offline/ +# description: + +from odoo import api, SUPERUSER_ID, _ + + +def pre_init_hook(cr): + """ + 数据初始化,只在安装时执行,更新时不执行 + """ + # todo: 启用中文 + pass + + +def post_init_hook(cr, registry): + """ + 数据初始化,只在安装后执行,更新时不执行 + """ + try: + env = api.Environment(cr, SUPERUSER_ID, {}) + ids = env['product.category'].sudo().with_context(lang='zh_CN').search([ + ('parent_id', '!=', False) + ], order='parent_path') + for rec in ids: + rec._compute_complete_name() + ids = env['stock.location'].sudo().with_context(lang='zh_CN').search([ + ('location_id', '!=', False), + ('usage', '!=', 'views'), + ], order='parent_path') + for rec in ids: + rec._compute_complete_name() + # 超级用户改时区为中国 + ids = env['res.users'].sudo().with_context(lang='zh_CN').browse([1, 2]) + ids.write({'tz': "Etc/GMT-8"}) + except Exception as e: + raise Warning(e) + +def uninstall_hook(cr, registry): + """ + 数据初始化,卸载时执行 + """ + pass diff --git a/app_base_chinese/i18n/zh_CN.po b/app_base_chinese/i18n/zh_CN.po new file mode 100644 index 00000000..54bad14d --- /dev/null +++ b/app_base_chinese/i18n/zh_CN.po @@ -0,0 +1,128 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * app_base_chinese +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0+e-20221228\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-02-14 08:50+0000\n" +"PO-Revision-Date: 2023-02-14 08:50+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: app_base_chinese +#: model:ir.model.fields,field_description:app_base_chinese.field_account_tax_group__active +msgid "Active" +msgstr "激活" + +#. module: app_base_chinese +#: model:ir.model,name:app_base_chinese.model_res_company +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_terms:ir.ui.view,arch_db:app_base_chinese.app_res_partner_kanban_view +msgid "Credit:" +msgstr "信用额:" + +#. module: app_base_chinese +#: model:ir.model,name:app_base_chinese.model_res_currency +msgid "Currency" +msgstr "币种" + +#. module: app_base_chinese +#: model:ir.model.fields,help:app_base_chinese.field_res_currency__sequence +msgid "Determine the display order. Sort ascending." +msgstr "决定显示顺序,数字越小排序越前" + +#. module: app_base_chinese +#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_sale_advance_payment_inv +msgid "FaPiao / Invoice Orders" +msgstr "创建收据/发票" + +#. module: app_base_chinese +#: model:ir.model.fields,field_description:app_base_chinese.field_res_partner__fax +#: model:ir.model.fields,field_description:app_base_chinese.field_res_users__fax +msgid "Fax" +msgstr "传真" + +#. module: app_base_chinese +#: model:ir.model.fields,field_description:app_base_chinese.field_stock_location__complete_name +msgid "Full Location Name" +msgstr "完整的位置名称" + +#. module: app_base_chinese +#: model:ir.model,name:app_base_chinese.model_stock_location +msgid "Inventory Locations" +msgstr "库存位置" + +#. module: app_base_chinese +#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_order_form +msgid "Invoices/FaPiao" +msgstr "收据/发票" + +#. module: app_base_chinese +#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_order_form +msgid "Make Collections" +msgstr "收款" + +#. module: app_base_chinese +#: model:ir.model.fields,field_description:app_base_chinese.field_res_partner__name +#: model:ir.model.fields,field_description:app_base_chinese.field_res_users__name +msgid "Name" +msgstr "名称" + +#. module: app_base_chinese +#: model_terms:ir.ui.view,arch_db:app_base_chinese.app_view_move_form +msgid "Post Entry" +msgstr "过帐" + +#. module: app_base_chinese +#: model:ir.model,name:app_base_chinese.model_product_category +msgid "Product Category" +msgstr "品类" + +#. module: app_base_chinese +#: model:ir.model.fields,field_description:app_base_chinese.field_res_currency__sequence +msgid "Sequence" +msgstr "排序" + +#. module: app_base_chinese +#: model:ir.model.fields,help:app_base_chinese.field_account_tax_group__active +msgid "Set active to false to hide the tax without removing it." +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" +msgstr "简称" + +#. module: app_base_chinese +#: model:ir.model,name:app_base_chinese.model_account_tax_group +msgid "Tax Group" +msgstr "税组" + +#. module: app_base_chinese +#. odoo-javascript +#: code:addons/app_base_chinese/static/src/xml/views.xml:0 +#, python-format +msgid "性能原因,只支持 200 条记录的显示" +msgstr "" + +#. module: app_base_chinese +#. odoo-javascript +#: code:addons/app_base_chinese/static/src/xml/views.xml:0 +#, python-format +msgid "记录没有树状结构" +msgstr "" diff --git a/app_base_chinese/ir/__init__.py b/app_base_chinese/ir/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/app_base_chinese/ir/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/app_base_chinese/models/__init__.py b/app_base_chinese/models/__init__.py new file mode 100644 index 00000000..72104a3e --- /dev/null +++ b/app_base_chinese/models/__init__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +from . import res_company +from . import res_partner +from . import res_currency +from . import product_category +from . import stock_location +from . import account_tax_group +from . import ir_module_module + + diff --git a/app_base_chinese/models/account_tax_group.py b/app_base_chinese/models/account_tax_group.py new file mode 100644 index 00000000..d1413359 --- /dev/null +++ b/app_base_chinese/models/account_tax_group.py @@ -0,0 +1,9 @@ +# -*- coding: utf-8 -*- + +from odoo import api, fields, models, _, tools + +class AccountTaxGroup(models.Model): + _inherit = 'account.tax.group' + + active = fields.Boolean(default=True, help="Set active to false to hide the tax without removing it.") + diff --git a/app_base_chinese/models/ir_module_module.py b/app_base_chinese/models/ir_module_module.py new file mode 100644 index 00000000..3bdb3c1d --- /dev/null +++ b/app_base_chinese/models/ir_module_module.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +import logging +import lxml.html +from odoo import api, fields, models, modules, tools, _ + +_logger = logging.getLogger(__name__) + + +class Module(models.Model): + _inherit = "ir.module.module" + + description_html_cn = fields.Html('Description HTML CN', compute='_get_desc_cn') + + @api.depends('name', 'description') + def _get_desc_cn(self): + for module in self: + module_path = modules.get_module_path(module.name, display_warning=False) # avoid to log warning for fake community module + if module_path: + path = modules.check_resource_path(module_path, 'static/description/index_cn.html') + else: + module.description_html_cn = False + if module_path and path: + # 注意: b 不能在 mode中才能使用 utf-8 + with tools.file_open(path, 'r') as desc_file: + doc = desc_file.read() + html = lxml.html.document_fromstring(doc) + for element, attribute, link, pos in html.iterlinks(): + if element.get('src') and not '//' in element.get('src') and not 'static/' in element.get('src'): + element.set('src', "/%s/static/description/%s" % (module.name, element.get('src'))) + module.description_html_cn = tools.html_sanitize(lxml.html.tostring(html)) + else: + module.description_html_cn = False diff --git a/app_base_chinese/models/product_category.py b/app_base_chinese/models/product_category.py new file mode 100644 index 00000000..22ce3751 --- /dev/null +++ b/app_base_chinese/models/product_category.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +import logging + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + + +class ProductCategory(models.Model): + _inherit = "product.category" + diff --git a/app_base_chinese/models/res_company.py b/app_base_chinese/models/res_company.py new file mode 100644 index 00000000..3d5103e4 --- /dev/null +++ b/app_base_chinese/models/res_company.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, fields, _ +from odoo.exceptions import UserError, ValidationError + + +class ResCompany(models.Model): + _inherit = 'res.company' + + @api.model + def _adjust_wh_cn_name(self): + companys = self.env['res.company'].with_context(active_test=False, lang='zh_CN').search([]) + for rec in companys: + # 修正区位名称 + ids = self.env['stock.location'].with_context(active_test=False).search( + [('name', 'like', ': Transit Location'), ('company_id', '=', rec.id)]) + ids.write({'name': '%s: 中转区位' % rec.name}) + ids = self.env['stock.location'].with_context(active_test=False).search( + [('name', 'like', ': Scrap'), ('company_id', '=', rec.id)]) + ids.write({'name': '%s: 报废区位' % rec.name}) + ids = self.env['stock.location'].with_context(active_test=False).search( + [('name', 'like', ': Inventory adjustment'), ('company_id', '=', rec.id)]) + ids.write({'name': '%s: 盘点区位' % rec.name}) + # 注意,原生没有在生产中使用 _ + ids = self.env['stock.location'].with_context(active_test=False).search([ + ('name', 'like', ': Production'), ('company_id', '=', rec.id)]) + ids.write({'name': '%s: 生产区位' % rec.name}) + ids = self.env['stock.location'].with_context(active_test=False).search([ + ('name', 'like', ': Subcontracting Location'), ('company_id', '=', rec.id)]) + ids.write({'name': '%s: 委外区位' % rec.name}) diff --git a/app_base_chinese/models/res_country.py b/app_base_chinese/models/res_country.py new file mode 100644 index 00000000..d0cf4869 --- /dev/null +++ b/app_base_chinese/models/res_country.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import fields, models + + +class Country(models.Model): + _inherit = 'res.country' + _order = 'sequence,name' + + sequence = fields.Integer('Sequence', help="Determine the display order", default=99) diff --git a/app_base_chinese/models/res_currency.py b/app_base_chinese/models/res_currency.py new file mode 100644 index 00000000..e78aec28 --- /dev/null +++ b/app_base_chinese/models/res_currency.py @@ -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 = list(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) diff --git a/app_base_chinese/models/res_partner.py b/app_base_chinese/models/res_partner.py new file mode 100644 index 00000000..47fa0a46 --- /dev/null +++ b/app_base_chinese/models/res_partner.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- + +from odoo import api, models, fields, _ +from odoo.exceptions import UserError, ValidationError + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + name = fields.Char(translate=False) + short_name = fields.Char('Short Name') # 简称 + fax = fields.Char('Fax') # 简称 + + # 增加地址显示中的手机号与电话号码 + # 选项 show_address 开启则增加显示手机与电话号 + def _get_name(self): + name = super(ResPartner, self)._get_name() + 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.strip() + + @api.model_create_multi + def create(self, vals_list): + for values in vals_list: + if 'lang' not in values: + values['lang'] = 'zh_CN' + return super(ResPartner, self).create(vals_list) diff --git a/app_base_chinese/models/stock_location.py b/app_base_chinese/models/stock_location.py new file mode 100644 index 00000000..48888cc9 --- /dev/null +++ b/app_base_chinese/models/stock_location.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- + +import logging + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + +class Location(models.Model): + _inherit = "stock.location" + + complete_name = fields.Char(translate=True) diff --git a/app_base_chinese/report/__init__.py b/app_base_chinese/report/__init__.py new file mode 100644 index 00000000..633f8661 --- /dev/null +++ b/app_base_chinese/report/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- + diff --git a/app_base_chinese/res/__init__.py b/app_base_chinese/res/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/app_base_chinese/res/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/app_base_chinese/static/description/banner.jpg b/app_base_chinese/static/description/banner.jpg new file mode 100644 index 00000000..576633ff Binary files /dev/null and b/app_base_chinese/static/description/banner.jpg differ diff --git a/app_base_chinese/static/description/banner.png b/app_base_chinese/static/description/banner.png new file mode 100644 index 00000000..87969b7b Binary files /dev/null and b/app_base_chinese/static/description/banner.png differ diff --git a/app_base_chinese/static/description/cnreadme.png b/app_base_chinese/static/description/cnreadme.png new file mode 100644 index 00000000..54018ff4 Binary files /dev/null and b/app_base_chinese/static/description/cnreadme.png differ diff --git a/app_base_chinese/static/description/demo1.jpg b/app_base_chinese/static/description/demo1.jpg new file mode 100644 index 00000000..6c61c24c Binary files /dev/null and b/app_base_chinese/static/description/demo1.jpg differ diff --git a/app_base_chinese/static/description/demo2.jpg b/app_base_chinese/static/description/demo2.jpg new file mode 100644 index 00000000..0d66a412 Binary files /dev/null and b/app_base_chinese/static/description/demo2.jpg differ diff --git a/app_base_chinese/static/description/demo3.jpg b/app_base_chinese/static/description/demo3.jpg new file mode 100644 index 00000000..d990d41c Binary files /dev/null and b/app_base_chinese/static/description/demo3.jpg differ diff --git a/app_base_chinese/static/description/icon.png b/app_base_chinese/static/description/icon.png new file mode 100644 index 00000000..22cbd278 Binary files /dev/null and b/app_base_chinese/static/description/icon.png differ diff --git a/app_base_chinese/static/description/index.html b/app_base_chinese/static/description/index.html new file mode 100644 index 00000000..4f9469ac --- /dev/null +++ b/app_base_chinese/static/description/index.html @@ -0,0 +1,156 @@ +
+
+
+

Chinese Enhance All in One。 Local customize for china user

+

20+ chinese setting enhance.

+
+

Lastest update: v16.23.08.02

+
+
+ Key features: +
    +
  • + + 1. Chinese address format, applicable to all Chinese customers, suppliers, partners, users, employee information etc. +
  • +
  • + + 2. Default values in Chinese such as country, time zone and currency. Processing module base, product. +
  • +
  • + + 3. Add customer abbreviation and display addresses in Chinese; prioritize displaying customer codes. +
  • +
  • + + 4. Display phone numbers along with mobile numbers for customer addresses. +
  • +
  • + + 5. Currency processing with added sorting display. +
  • +
  • + + 6. Fixed bug where the category list and m2o field did not display the name of the Chinese directory. +
  • +
  • + + 7. Fixed bug where warehouse location list and m2o field did not display the name of the Chinese directory. +
  • +
  • + + 8. Superuser changed time zone to China. +
  • +
  • + + 9. Date format is year-month-day (e.g., 2023-08-08) and time is 12:34 +
  • +
  • + + 10.Country sorting added; China ranked first +
  • +
  • + + 11.Display payment-related information according to typical practices in China. +
  • +
  • + + 12.Default export translation is set to Mandarin (po). +
  • +
  • + + 13.Added 'name_en_US' field in base model which updates translation value when assigned a value. +
  • +
  • + + 14.Common decimal precision adjustments made. +
  • +
  • + + 15.Sales team changed to "China". +
  • +
  • + + 21. Multi-language Support. Multi-Company Support. +
  • +
  • + + 22. Support Odoo 16,15,14,13,12, Enterprise and Community and odoo.sh Edition. +
  • +
  • + + 23. Full Open Source.. +
  • +
+
+
+
+ +
+
+
+
+
+ +
+
+

Set the address format to chinese. Including all customer, supplier, users

+
+ +
+
+
+ + +
+
+

Set Default country, state, timezone, currency.

+
+ +
+
+
+ +
+
+

Fix Category Display not in english bug.

+
+ +
+
+
+ +
+
+
+

Technical Help & Support

+
+
+
+

+ For any type of technical help & support requests, Feel free to contact us

+ + odoo@china.com +

+ Via QQ: 300883 (App user would not get QQ or any other IM support. Only for odoo project customize.)

+ + 300883@qq.com +
+
+

+ Visit our website for more support.

+

https://www.odooai.cn

+
+
+
+
+

More Powerful addons, Make your odoo very easy to use, easy customize: + odooai.cn Odoo Addons +

+
+
+ diff --git a/app_base_chinese/static/src/public/database_manager.create_form.qweb.html b/app_base_chinese/static/src/public/database_manager.create_form.qweb.html new file mode 100644 index 00000000..341dba00 --- /dev/null +++ b/app_base_chinese/static/src/public/database_manager.create_form.qweb.html @@ -0,0 +1,67 @@ + + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+
+ + +
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
diff --git a/app_base_chinese/static/src/scss/app_style.scss b/app_base_chinese/static/src/scss/app_style.scss new file mode 100644 index 00000000..649c0fb6 --- /dev/null +++ b/app_base_chinese/static/src/scss/app_style.scss @@ -0,0 +1,39 @@ +//必须有 form ,故要特殊处理样式 +.o_form_view.o_form_nosheet.o_form_address_chinese, .o_form_view .o_form_nosheet.o_form_address_chinese { + padding: 0 0 0 0; +} +.o_form_view .o_address_format.o_address_chinese { + .o_address_country { + display: -webkit-inline-flex; + display: inline-flex; + width: 38%; + margin-right: 2%; + } +} +.o_form_view .o_address_format.o_address_chinese { + .o_address_country { + display: -webkit-inline-flex; + display: inline-flex; + width: 38%; + margin-right: 2%; + } +} + +.o_form_view .o_form_editable .o_address_format.o_address_chinese { + .o_address_zip{ + width: 38%; + margin-right: 2%; + } + .o_address_state { + width: 38%; + margin-right: 2%; + } + .o_address_city{ + width: 38%; + margin-right: 2%; + } + .o_address_city_id{ + width: 38%; + margin-right: 2%; + } +} diff --git a/app_base_chinese/static/src/xml/views.xml b/app_base_chinese/static/src/xml/views.xml new file mode 100644 index 00000000..e05ae2a2 --- /dev/null +++ b/app_base_chinese/static/src/xml/views.xml @@ -0,0 +1,12 @@ + + + + + +
+ 性能原因,只支持 200 条记录的显示 + 记录没有树状结构 +
+
+
+
\ No newline at end of file diff --git a/app_base_chinese/views/account_move_views.xml b/app_base_chinese/views/account_move_views.xml new file mode 100644 index 00000000..728d8a79 --- /dev/null +++ b/app_base_chinese/views/account_move_views.xml @@ -0,0 +1,19 @@ + + + + + + + app.account.move.form + account.move + + + + + Post Entry + + + + + + diff --git a/app_base_chinese/views/ir_default_views.xml b/app_base_chinese/views/ir_default_views.xml new file mode 100644 index 00000000..d14570d7 --- /dev/null +++ b/app_base_chinese/views/ir_default_views.xml @@ -0,0 +1,27 @@ + + + + + + app.res.currency.tree + res.currency + + + + + + + + + + app.res.currency.form + res.currency + + + + + + + + + diff --git a/app_base_chinese/views/ir_module_module_views.xml b/app_base_chinese/views/ir_module_module_views.xml new file mode 100644 index 00000000..264b81fa --- /dev/null +++ b/app_base_chinese/views/ir_module_module_views.xml @@ -0,0 +1,13 @@ + + + + app.base.chinese.module.module.form + ir.module.module + + + + + + + + \ No newline at end of file diff --git a/app_base_chinese/views/res_company_views.xml b/app_base_chinese/views/res_company_views.xml new file mode 100644 index 00000000..880be72b --- /dev/null +++ b/app_base_chinese/views/res_company_views.xml @@ -0,0 +1,26 @@ + + + + + app.res.company.form + res.company + + + + + + + + + + app.res.company.form + res.company + + + + + + + + + diff --git a/app_base_chinese/views/res_currency_views.xml b/app_base_chinese/views/res_currency_views.xml new file mode 100644 index 00000000..51fe143e --- /dev/null +++ b/app_base_chinese/views/res_currency_views.xml @@ -0,0 +1,27 @@ + + + + + + app.ir.default tree view + ir.default + + + + + + + + + + app.ir.default form view + ir.default + + + + + + + + + diff --git a/app_base_chinese/views/res_partner_views.xml b/app_base_chinese/views/res_partner_views.xml new file mode 100644 index 00000000..cb4441f3 --- /dev/null +++ b/app_base_chinese/views/res_partner_views.xml @@ -0,0 +1,105 @@ + + + + + + app.res.partner.form + res.partner + + + + + + + + + + + + + + + 1 + 1 + + + + + + + + [] + + + +
+ +
+
+ +
+
+
+
+ + + app.res.partner.form.chinese + res.partner + + +
+
+
+ + +
+ + + + + +
+
+
+
+ + + app.res.partner.tree + res.partner + + + + + + + + + + + app.res.partner.kanban + res.partner + + + + + + +
  • + Credit: + +
  • +
    +
    +
    + + + + + + +
    +
    diff --git a/app_base_chinese/views/sale_order_views.xml b/app_base_chinese/views/sale_order_views.xml new file mode 100644 index 00000000..b67ab85c --- /dev/null +++ b/app_base_chinese/views/sale_order_views.xml @@ -0,0 +1,24 @@ + + + + + app.sale.order.form + sale.order + + + + + Make Collections + + + + Make Collections + + + + Invoices/FaPiao + + + + + \ No newline at end of file diff --git a/app_base_chinese/wizard/sale_make_invoice_advance_views.xml b/app_base_chinese/wizard/sale_make_invoice_advance_views.xml new file mode 100644 index 00000000..1362a7aa --- /dev/null +++ b/app_base_chinese/wizard/sale_make_invoice_advance_views.xml @@ -0,0 +1,21 @@ + + + + FaPiao / Invoice Orders + + + + app.account.move.form + sale.advance.payment.inv + + + + FaPiao / Invoice Orders + + + + + + Create FaPiao / Invoice + + diff --git a/app_odoo_customize/__manifest__.py b/app_odoo_customize/__manifest__.py index c8b9a5e9..dfc6f24c 100644 --- a/app_odoo_customize/__manifest__.py +++ b/app_odoo_customize/__manifest__.py @@ -23,7 +23,7 @@ { 'name': 'odoo Tweak,Ai Employee,Boost,Customize All in One. Customize,UI,Boost,Security,Data,Development Enhance', - 'version': '16.5.23.09.17', + 'version': '17.23.09.17', 'author': 'odooai.cn', 'category': 'Extra Tools', 'website': 'https://www.odooai.cn',