diff --git a/.gitignore b/.gitignore
index 03aa910d..58fd025c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,130 @@
-# PyCharm
-# http://www.jetbrains.com/pycharm/webhelp/project.html
-.idea
-.iml
-/app_odoo_customize/_resource
-/app_web_studio
-/web_studio
+#个人文件目录,不传到git,每个人将个人文件放到 _s 目录下
+_s/
+addons_ent_remove/
+addons_odoo/
+app-dev/
+myconf/
+z/
+/.idea
+.idea/
+\.idea
+.git/
+.gitee/
+.vscode/
+.tx/
+~*.*
+.pyc
+.DS_Store
+u*.bat
+ivan.conf
+chill.conf
+vcs.xml
+deployment.xml
+
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+parts/
+sdist/
+var/
+wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+.hypothesis/
+.pytest_cache/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# pyenv
+.python-version
+
+# celery beat schedule file
+celerybeat-schedule
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
diff --git a/app_dynamic_list/__init__.py b/app_dynamic_list/__init__.py
deleted file mode 100644
index faaaf799..00000000
--- a/app_dynamic_list/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-
-
diff --git a/app_dynamic_list/__openerp__.py b/app_dynamic_list/__openerp__.py
deleted file mode 100644
index 3f1dd57b..00000000
--- a/app_dynamic_list/__openerp__.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-{
- 'name': 'App Customize Columns of List (Tree) View Dynamic',
- 'version': '10.0.1.6',
- 'author': 'Sunpop.cn',
- 'category': 'Productivity',
- 'website': 'http://www.odooapp.cn',
- 'sequence': 2,
- 'summary': 'App Customize columns of List (Tree) View. Dynamic list.',
- 'description': """
-
-App Customize Columns of List (Tree) View
-============
-App Customize Columns of List (Tree) View module is made to show/hide the columns on the list/tree view of Odoo. After installing the module, a "Set Columns" button will be show to the list view.
-You can customize every odoo list/tree view easily.
-
-This module is ready for Community and Enterprise Edition.
-
- """,
- 'images': ['static/description/sales_coms.jpg'
- ],
- 'depends': ['web'],
- 'data': [
- 'views/listview_button.xml',
- ],
- 'demo': [],
- 'test': [
- ],
- 'installable': True,
- 'application': True,
- 'auto_install': False,
- 'qweb': ['static/src/xml/listview_button_view.xml'],
-}
-
diff --git a/app_dynamic_list/i18n/zh_CN.po b/app_dynamic_list/i18n/zh_CN.po
deleted file mode 100644
index c07d57f0..00000000
--- a/app_dynamic_list/i18n/zh_CN.po
+++ /dev/null
@@ -1,24 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * apps_material_backend_theme
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0c\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-09-07 08:57+0000\n"
-"PO-Revision-Date: 2016-09-07 08:57+0000\n"
-"Last-Translator: Ivan Deng <300883@qq.com>, 2017\n"
-"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: zh_CN\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: app_dynamic_list
-#. openerp-web
-#: code:addons/apps_material_backend_theme/static/src/xml/listview_button_view.xml:121
-#, python-format
-msgid "Set Columns"
-msgstr "显示列"
diff --git a/app_dynamic_list/images/dynamiclist_homepage.jpg b/app_dynamic_list/images/dynamiclist_homepage.jpg
deleted file mode 100644
index 5563db16..00000000
Binary files a/app_dynamic_list/images/dynamiclist_homepage.jpg and /dev/null differ
diff --git a/app_dynamic_list/static/description/icon.png b/app_dynamic_list/static/description/icon.png
deleted file mode 100644
index 2a04f219..00000000
Binary files a/app_dynamic_list/static/description/icon.png and /dev/null differ
diff --git a/app_dynamic_list/static/description/index.html b/app_dynamic_list/static/description/index.html
deleted file mode 100644
index f75d97bc..00000000
--- a/app_dynamic_list/static/description/index.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
Customize hide/show the columns on the list (tree) view dynamically
-
-
This moduld allows user to customize columns dynamically in list (tree) view of any object of any
- installed module.
-
-
-
"Set Columns" button contains all field(s) in dropdown with checkbox which will exist in
- list view of current object. So if user wants to show/hide any field, then he/she has to just do
- check/uncheck that respective checkbox besides field name in dropdown list and then just click on
- "Apply" button.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
diff --git a/app_dynamic_list/static/description/sales_com.png b/app_dynamic_list/static/description/sales_com.png
deleted file mode 100644
index 48b199f5..00000000
Binary files a/app_dynamic_list/static/description/sales_com.png and /dev/null differ
diff --git a/app_dynamic_list/static/description/sales_ent.png b/app_dynamic_list/static/description/sales_ent.png
deleted file mode 100644
index 55986b90..00000000
Binary files a/app_dynamic_list/static/description/sales_ent.png and /dev/null differ
diff --git a/app_dynamic_list/static/src/css/my.css b/app_dynamic_list/static/src/css/my.css
deleted file mode 100644
index e69de29b..00000000
diff --git a/app_dynamic_list/static/src/js/dynamic_list.js b/app_dynamic_list/static/src/js/dynamic_list.js
deleted file mode 100644
index dd4f8470..00000000
--- a/app_dynamic_list/static/src/js/dynamic_list.js
+++ /dev/null
@@ -1,97 +0,0 @@
-odoo.define('app_dynamic_list.shcolumns', function (require) {
-"use strict";
-
-var core = require('web.core');
-var ListView = require('web.ListView');
-var QWeb = core.qweb;
-
-ListView.include({
- reload: function () {
- this.setup_columns(this.fields_view.fields, this.grouped);
- this.$el.html(QWeb.render(this._template, this));
- return this.reload_content();
- },
-
- render_buttons: function($node) {
- var self = this;
- this._super($node);
- this.$buttons.find('.oe_select_columns').click(this.proxy('my_setup_columns'));
- this.$buttons.find('.oe_dropdown_btn').click(this.proxy('hide_show_columns'));
- this.$buttons.find('.dropdown-menu').click(this.proxy('stop_event'));
- },
-
- my_setup_columns: function (fields, grouped) {
- $("#showcb").toggle();
- var getcb = document.getElementById('showcb');
- this.visible_columns = _.filter(this.columns, function (column) {
- var firstcheck = document.getElementById(column.id);
- if(firstcheck == null)
- {
- var li= document.createElement("li");
- var description = document.createTextNode(column.string);
- var checkbox = document.createElement("input");
- checkbox.id = column.id;
- checkbox.type = "checkbox";
- checkbox.name = "cb";
-
- if(column.invisible !== '1')
- {
- checkbox.checked = true;
- }
- li.appendChild(checkbox);
- li.appendChild(description);
- getcb.appendChild(li);
- }
- else
- {
- if(column.invisible !== '1')
- {
- firstcheck.checked = true;
- }
- else
- {
- firstcheck.checked = false;
- }
- }
- });
- },
- stop_event : function(e)
- {
- e.stopPropagation();
- },
-
- hide_show_columns : function()
- {
- $("#showcb").hide();
- this.setup_columns(this.fields_view.fields, this.grouped);
- this.$el.html(QWeb.render(this._template, this));
- return this.reload_content();
- },
-
- setup_columns: function (fields, grouped) {
- this._super(fields, grouped);
- this.visible_columns = _.filter(this.columns, function (column) {
- var cbid = document.getElementById(column.id);
- if(cbid !== null)
- {
- var cbid = cbid.checked;
- if(cbid !== false)
- {
- column.invisible = '2';
- }
- else
- {
- column.invisible = '1';
- }
- }
- return column.invisible !== '1';
- });
- this.aggregate_columns = _(this.visible_columns).invoke('to_aggregate');
- },
-});
-
-$(document).click(function(){
- $("#showcb").hide();
-});
-
-});
diff --git a/app_dynamic_list/static/src/xml/listview_button_view.xml b/app_dynamic_list/static/src/xml/listview_button_view.xml
deleted file mode 100644
index a5c0e58f..00000000
--- a/app_dynamic_list/static/src/xml/listview_button_view.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
-
-
-
-
-
- Set Columns
-
-
-
-
-
-
-
-
diff --git a/app_dynamic_list/views/listview_button.xml b/app_dynamic_list/views/listview_button.xml
deleted file mode 100644
index fdad6af3..00000000
--- a/app_dynamic_list/views/listview_button.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app_odoo_customize/__init__.py b/app_odoo_customize/__init__.py
deleted file mode 100644
index e49c8b6f..00000000
--- a/app_odoo_customize/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- coding: utf-8 -*-
-import models
-
-
diff --git a/app_odoo_customize/__openerp__.py b/app_odoo_customize/__openerp__.py
deleted file mode 100644
index fd243a50..00000000
--- a/app_odoo_customize/__openerp__.py
+++ /dev/null
@@ -1,73 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-{
- 'name': 'App Odoo Customize(Backend Debranding Title,Language,Documentation,Quick Debug,Delete clear)',
- 'version': '10.0.2.4',
- 'author': 'Sunpop.cn',
- 'category': 'Productivity',
- 'website': 'http://www.sunpop.cn',
- 'license': 'AGPL-3',
- 'sequence': 2,
- 'summary': 'Quick customize and debranding your own Odoo. Quick debug, Language Switcher, Online Documentation Access,Delete test data.',
- 'description': """
-
-App Odoo Customize(Debranding Title,Language,Documentation,Quick Debug)
-============
-White label odoo.
-You can config odoo, make it look like your own platform.
-1. Deletes Odoo label in footer
-2. Replaces "Odoo" in Windows title
-3. Customize Documentation, Support, About links and title in usermenu
-4. Adds "Developer mode" link to the top right-hand User Menu.
-5. Adds Quick Language Switcher to the top right-hand User Menu.
-6. Adds Country flags to the top right-hand User Menu.
-7. Adds English and Chinese user documentation access to the top right-hand User Menu.
-8. Adds developer documentation access to the top right-hand User Menu.
-9. Customize "My odoo.com account" button
-10. Standalone setting panel, easy to setup.
-11. Provide 236 country flags.
-12. Multi-language Support.
-13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15)
-14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc.
-15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice...
-16. Fix odoo reload module translation bug while enable english language
-17. Stop Odoo Auto Subscribe(Performance Improve)
-
-This module can help to white label the Odoo.
-Also helpful for training and support for your odoo end-user.
-The user can get the help document just by one click.
-
- """,
- 'images': ['static/description/banner.png'],
- 'depends': ['web','mail'],
- 'data': [
- 'views/app_odoo_customize_view.xml',
- 'views/app_theme_config_settings_view.xml',
- # data
- 'data/ir_config_parameter.xml',
- ],
- 'demo': [],
- 'test': [
- ],
- 'installable': True,
- 'application': True,
- 'auto_install': False,
- 'qweb': [
- 'static/src/xml/customize_user_menu.xml',
- ],
-}
-
diff --git a/app_odoo_customize/data/ir_config_parameter.xml b/app_odoo_customize/data/ir_config_parameter.xml
deleted file mode 100644
index ede752c1..00000000
--- a/app_odoo_customize/data/ir_config_parameter.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
- app_system_name
- odooApp
-
-
-
- app_show_lang
- True
-
-
- app_show_debug
- True
-
-
- app_show_documentation
- True
-
-
- app_show_documentation_dev
- True
-
-
- app_show_support
- True
-
-
- app_show_account
- True
-
-
- app_show_enterprise
- False
-
-
- app_show_share
- False
-
-
- app_show_poweredby
- False
-
-
- app_stop_subscribe
- False
-
-
-
- app_documentation_url
- http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-
- app_documentation_dev_url
- http://www.sunpop.cn/documentation/10.0/index.html
-
-
- app_support_url
- http://www.sunpop.cn/trial
-
-
- app_account_title
- My Online Account
-
-
- app_account_url
- http://www.sunpop.cn/my-account
-
-
-
\ No newline at end of file
diff --git a/app_odoo_customize/i18n/zh_CN.po b/app_odoo_customize/i18n/zh_CN.po
deleted file mode 100644
index aea4159b..00000000
--- a/app_odoo_customize/i18n/zh_CN.po
+++ /dev/null
@@ -1,397 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_odoo_customize
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0+e-20171107\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-01-10 11:41+0000\n"
-"PO-Revision-Date: 2018-01-10 11:41+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_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Accounting"
-msgstr "会计"
-
-#. module: app_odoo_customize
-#. openerp-web
-#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:7
-#, python-format
-msgid "Activate the developer mode"
-msgstr "激活开发者模式"
-
-#. module: app_odoo_customize
-#. openerp-web
-#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:10
-#, python-format
-msgid "Activate the developer mode (with assets)"
-msgstr "激活开发者模式 (assets)"
-
-#. module: app_odoo_customize
-#: model:ir.model,name:app_odoo_customize.model_app_theme_config_settings
-msgid "App Odoo Customize settings"
-msgstr "App Odoo 自定义设置"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Apply"
-msgstr "应用"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Base Models"
-msgstr "基础模型数据"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Cancel"
-msgstr "取消"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_stop_subscribe
-msgid "Check to stop Odoo Subscribe function"
-msgstr "Check to stop Odoo Subscribe function"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_create_uid
-msgid "Created by"
-msgstr "创建人"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_create_date
-msgid "Created on"
-msgstr "创建时间"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Data Cleaning (Be careful to do that!)"
-msgstr "数据清理(请谨慎操作!)"
-
-#. module: app_odoo_customize
-#. openerp-web
-#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:13
-#, python-format
-msgid "Deactivate the developer mode"
-msgstr "取消激活开发者模式"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All BOM"
-msgstr "删除所有物料清单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Manufacturing Order"
-msgstr "删除所有生产单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Message"
-msgstr "删除所有消息"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Move/Picking/Package/Lot"
-msgstr "删除所有库存调拨/拣货/包装/批次数据"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All POS Order"
-msgstr "删除所有POS订单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Product"
-msgstr "删除所有产品及变体"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Product Attribute"
-msgstr "删除所有产品属性"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Purchase Order and Requisition"
-msgstr "删除所有询价单、采购单,采购招标"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Sales Order"
-msgstr "删除所有报价单、销售单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Voucher/Invoice/Bill"
-msgstr "删除所有收据/发票/账单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Delete All Workflow"
-msgstr "删除所有工作流"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_documentation_dev_url
-msgid "Developer Documentation Url"
-msgstr "开发者手册链接"
-
-#. module: app_odoo_customize
-#. openerp-web
-#: code:addons/app_odoo_customize/static/src/xml/customize_user_menu.xml:16
-#, python-format
-msgid "Developer Manual"
-msgstr "开发者手册"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_display_name
-msgid "Display Name"
-msgstr "显示名称"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_documentation_url
-msgid "Documentation Url"
-msgstr "用户手册链接"
-
-#. module: app_odoo_customize
-#: model:ir.model,name:app_odoo_customize.model_mail_thread
-msgid "Email Thread"
-msgstr "Email线程"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_id
-msgid "ID"
-msgstr "ID"
-
-#. module: app_odoo_customize
-#: model:ir.model,name:app_odoo_customize.model_base_language_install
-msgid "Install Language"
-msgstr "安装语言"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Inventory"
-msgstr "库存"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Item to Show"
-msgstr "显示/隐藏菜单项"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings___last_update
-msgid "Last Modified on"
-msgstr "最后修改日"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_write_uid
-msgid "Last Updated by"
-msgstr "最后更新人"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_write_date
-msgid "Last Updated on"
-msgstr "最后更新时间"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "MRP"
-msgstr "生产"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_account_title
-msgid "My Odoo.com Account Title"
-msgstr "我的帐户显示标题"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_account_url
-msgid "My Odoo.com Account Url"
-msgstr "我的帐户链接"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Online Support"
-msgstr "系统支持"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "POS"
-msgstr "POS门店"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Please confirm to delete the select data?"
-msgstr "确认删除指定数据?"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.replace_login
-msgid "Powered by odooApp "
-msgstr "技术支持 odooApp "
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Purchase"
-msgstr "采购"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Sales"
-msgstr "销售"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_system_name
-msgid "Setup System Name,which replace Odoo"
-msgstr "设置系统名称,取代Odoo"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_documentation_dev
-msgid "Show Developer Documentation"
-msgstr "显示开发者文档"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_documentation
-msgid "Show Documentation"
-msgstr "显示文档"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_enterprise
-msgid "Show Enterprise Tag"
-msgstr "显示升级企业版标签提醒"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_account
-msgid "Show My Account"
-msgstr "显示我的帐户"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_poweredby
-msgid "Show Powered by Odoo"
-msgstr "显示Powered by Odoo"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_debug
-msgid "Show Quick Debug"
-msgstr "显示快速调试"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_lang
-msgid "Show Quick Language Switcher"
-msgstr "显示快速多语言切换"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_share
-msgid "Show Share Dashboard"
-msgstr "显示分享Odoo"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_show_support
-msgid "Show Support"
-msgstr "显示支持"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_stop_subscribe
-msgid "Stop Odoo Subscribe(Performance Improve)"
-msgstr "停用Odoo自动订阅(提高性能)"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_support_url
-msgid "Support Url"
-msgstr "支持链接"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,field_description:app_odoo_customize.field_app_theme_config_settings_app_system_name
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "System Name"
-msgstr "系统名称"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_enterprise
-msgid "Uncheck to hide the Enterprise tag"
-msgstr "Uncheck to hide the Enterprise tag"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_share
-msgid "Uncheck to hide the Odoo Share Dashboard"
-msgstr "Uncheck to hide the Odoo Share Dashboard"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_poweredby
-msgid "Uncheck to hide the Powered by text"
-msgstr "不勾选则不显示Odoo Powered by"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "User Menu"
-msgstr "用户菜单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "User Menu Content"
-msgstr "菜单项具体操作设置"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "Visit our website for more apps and Support. http://www.sunpop.cn"
-msgstr "请访问我们的网站获取更多支持. http://www.sunpop.cn"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_account
-msgid "When enable,User can login to your website"
-msgstr "启用后,会显示登录到你的网站"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_lang
-msgid "When enable,User can quick switch language in user menu"
-msgstr "启用后,会显示快速语言切换菜单"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_documentation_dev
-msgid "When enable,User can visit development documentation"
-msgstr "启用后,会显示开发手册链接"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_documentation
-msgid "When enable,User can visit user manual"
-msgstr "启用后,会显示用户手册链接"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_support
-msgid "When enable,User can vist your support site"
-msgstr "启用后,会显示在线支持链接"
-
-#. module: app_odoo_customize
-#: model:ir.model.fields,help:app_odoo_customize.field_app_theme_config_settings_app_show_debug
-msgid "When enable,everyone login can see the debug menu"
-msgstr "启用后,会显示快速调试菜单"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "White Label Setting"
-msgstr "个性化odoo设置"
-
-#. module: app_odoo_customize
-#: model:ir.model,name:app_odoo_customize.model_ir_ui_view
-msgid "ir.ui.view"
-msgstr "ir.ui.view"
-
-#. module: app_odoo_customize
-#: model:ir.actions.act_window,name:app_odoo_customize.action_app_theme_config
-#: model:ir.ui.menu,name:app_odoo_customize.menu_app_theme_config
-msgid "odooApp Customize"
-msgstr "odooApp 定制"
-
-#. module: app_odoo_customize
-#: model:ir.ui.menu,name:app_odoo_customize.menu_app_group
-msgid "odooApp"
-msgstr "odooApp"
-
-#. module: app_odoo_customize
-#: model:ir.ui.view,arch_db:app_odoo_customize.view_app_theme_config_settings
-msgid "odooApp Customize Settings"
-msgstr "odooApp 定制化设置"
-
diff --git a/app_odoo_customize/models/__init__.py b/app_odoo_customize/models/__init__.py
deleted file mode 100644
index 36ac87dc..00000000
--- a/app_odoo_customize/models/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import ir_ui_view
-import app_theme_config_settings
-import base_language_install
-import mail_thread
diff --git a/app_odoo_customize/models/app_theme_config_settings.py b/app_odoo_customize/models/app_theme_config_settings.py
deleted file mode 100644
index 44079a48..00000000
--- a/app_odoo_customize/models/app_theme_config_settings.py
+++ /dev/null
@@ -1,440 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import logging
-
-from openerp import api, fields, models, _
-
-_logger = logging.getLogger(__name__)
-
-
-class AppThemeConfigSettings(models.TransientModel):
- _inherit = 'res.config.settings'
- _name = 'app.theme.config.settings'
-
- _description = u"App Odoo Customize settings"
- app_system_name = fields.Char('System Name', help=u"Setup System Name,which replace Odoo")
- app_show_lang = fields.Boolean('Show Quick Language Switcher',
- help=u"When enable,User can quick switch language in user menu")
- app_show_debug = fields.Boolean('Show Quick Debug', help=u"When enable,everyone login can see the debug menu")
- app_show_documentation = fields.Boolean('Show Documentation', help=u"When enable,User can visit user manual")
- app_show_documentation_dev = fields.Boolean('Show Developer Documentation',
- help=u"When enable,User can visit development documentation")
- app_show_support = fields.Boolean('Show Support', help=u"When enable,User can vist your support site")
- app_show_account = fields.Boolean('Show My Account', help=u"When enable,User can login to your website")
- app_show_enterprise = fields.Boolean('Show Enterprise Tag', help=u"Uncheck to hide the Enterprise tag")
- app_show_share = fields.Boolean('Show Share Dashboard', help=u"Uncheck to hide the Odoo Share Dashboard")
- app_show_poweredby = fields.Boolean('Show Powered by Odoo', help=u"Uncheck to hide the Powered by text")
- app_stop_subscribe = fields.Boolean('Stop Odoo Subscribe(Performance Improve)', help=u"Check to stop Odoo Subscribe function")
-
- app_documentation_url = fields.Char('Documentation Url')
- app_documentation_dev_url = fields.Char('Developer Documentation Url')
- app_support_url = fields.Char('Support Url')
- app_account_title = fields.Char('My Odoo.com Account Title')
- app_account_url = fields.Char('My Odoo.com Account Url')
-
- @api.model
- def get_default_all(self, fields):
- ir_config = self.env['ir.config_parameter']
- app_system_name = ir_config.get_param('app_system_name', default='odooApp')
-
- app_show_lang = True if ir_config.get_param('app_show_lang') == "True" else False
- app_show_debug = True if ir_config.get_param('app_show_debug') == "True" else False
- app_show_documentation = True if ir_config.get_param('app_show_documentation') == "True" else False
- app_show_documentation_dev = True if ir_config.get_param('app_show_documentation_dev') == "True" else False
- app_show_support = True if ir_config.get_param('app_show_support') == "True" else False
- app_show_account = True if ir_config.get_param('app_show_account') == "True" else False
- app_show_enterprise = True if ir_config.get_param('app_show_enterprise') == "True" else False
- app_show_share = True if ir_config.get_param('app_show_share') == "True" else False
- app_show_poweredby = True if ir_config.get_param('app_show_poweredby') == "True" else False
- app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False
-
- app_documentation_url = ir_config.get_param('app_documentation_url',
- default='http://www.sunpop.cn/documentation/user/10.0/en/index.html')
- app_documentation_dev_url = ir_config.get_param('app_documentation_dev_url',
- default='http://www.sunpop.cn/documentation/10.0/index.html')
- app_support_url = ir_config.get_param('app_support_url', default='http://www.sunpop.cn/trial/')
- app_account_title = ir_config.get_param('app_account_title', default='My Online Account')
- app_account_url = ir_config.get_param('app_account_url', default='http://www.sunpop.cn/my-account/')
- return dict(
- app_system_name=app_system_name,
- app_show_lang=app_show_lang,
- app_show_debug=app_show_debug,
- app_show_documentation=app_show_documentation,
- app_show_documentation_dev=app_show_documentation_dev,
- app_show_support=app_show_support,
- app_show_account=app_show_account,
- app_show_enterprise=app_show_enterprise,
- app_show_share=app_show_share,
- app_show_poweredby=app_show_poweredby,
- app_stop_subscribe=app_stop_subscribe,
-
- app_documentation_url=app_documentation_url,
- app_documentation_dev_url=app_documentation_dev_url,
- app_support_url=app_support_url,
- app_account_title=app_account_title,
- app_account_url=app_account_url
- )
-
- @api.multi
- def set_default_all(self):
- self.ensure_one()
- ir_config = self.env['ir.config_parameter']
- ir_config.set_param("app_system_name", self.app_system_name or "")
- ir_config.set_param("app_show_lang", self.app_show_lang or "False")
- ir_config.set_param("app_show_debug", self.app_show_debug or "False")
- ir_config.set_param("app_show_documentation", self.app_show_documentation or "False")
- ir_config.set_param("app_show_documentation_dev", self.app_show_documentation_dev or "False")
- ir_config.set_param("app_show_support", self.app_show_support or "False")
- ir_config.set_param("app_show_account", self.app_show_account or "False")
- ir_config.set_param("app_show_enterprise", self.app_show_enterprise or "False")
- ir_config.set_param("app_show_share", self.app_show_share or "False")
- ir_config.set_param("app_show_poweredby", self.app_show_poweredby or "False")
- ir_config.set_param("app_stop_subscribe", self.app_stop_subscribe or "False")
-
- ir_config.set_param("app_documentation_url",
- self.app_documentation_url or "http://www.sunpop.cn/documentation/user/10.0/en/index.html")
- ir_config.set_param("app_documentation_dev_url",
- self.app_documentation_dev_url or "http://www.sunpop.cn/documentation/10.0/index.html")
- ir_config.set_param("app_support_url", self.app_support_url or "http://www.sunpop.cn/trial/")
- ir_config.set_param("app_account_title", self.app_account_title or "My Online Account")
- ir_config.set_param("app_account_url", self.app_account_url or "http://www.sunpop.cn/my-account/")
-
- return True
-
- @api.multi
- def remove_sales(self):
- to_removes = [
- # 清除销售单据
- ['sale.order.line', ],
- ['sale.order', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号
- seqs = self.env['ir.sequence'].search([('code', '=', 'sale.order')])
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where code ='sale.order';"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- def remove_product(self):
- to_removes = [
- # 清除产品数据
- ['product.product', ],
- ['product.template', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号,针对自动产品编号
- seqs = self.env['ir.sequence'].search([('code', '=', 'product.product')])
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where code ='product.product';"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- def remove_product_attribute(self):
- to_removes = [
- # 清除产品属性
- ['product.attribute.value', ],
- ['product.attribute', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_pos(self):
- to_removes = [
- # 清除POS单据
- ['pos.order.line', ],
- ['pos.order', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号
- seqs = self.env['ir.sequence'].search([('code', '=', 'pos.order')])
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where code ='pos.order';"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_purchase(self):
- to_removes = [
- # 清除采购单据
- ['purchase.order.line', ],
- ['purchase.order', ],
- ['purchase.requisition.line', ],
- ['purchase.requisition', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号
- seqs = self.env['ir.sequence'].search([('code', '=', 'purchase.order')])
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where code ='purchase.order';"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_mrp(self):
- to_removes = [
- # 清除生产单据
- ['mrp.workcenter.productivity', ],
- ['mrp.workorder', ],
- ['mrp.production.workcenter.line', ],
- ['mrp.production', ],
- ['mrp.production.product.line', ],
- ['mrp.unbuild', ],
- ['change.production.qty', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号
- seqs = self.env['ir.sequence'].search(['|', ('code', '=', 'mrp.production'), ('code', '=', 'mrp.unbuild')])
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where (code ='mrp.production' or code ='mrp.unbuild');"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_mrp_bom(self):
- to_removes = [
- # 清除生产BOM
- ['mrp.bom.line', ],
- ['mrp.bom', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_inventory(self):
- to_removes = [
- # 清除库存单据
- ['stock.quant', ],
- ['stock.quant.package', ],
- ['stock.quant.move.rel', ],
- ['stock.move', ],
- ['stock.pack.operation', ],
- ['stock.picking', ],
- ['stock.scrap', ],
- ['stock.inventory.line', ],
- ['stock.inventory', ],
- ['stock.production.lot', ],
- ['stock.fixed.putaway.strat', ],
- ['make.procurement', ],
- ['procurement.order', ],
- ['procurement.group', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- # 更新序号
- seqs = self.env['ir.sequence'].search([
- '|', ('code', '=', 'stock.lot.serial'),
- '|', ('code', '=', 'stock.lot.tracking'),
- '|', ('code', '=', 'stock.orderpoint'),
- '|', ('code', '=', 'stock.picking'),
- '|', ('code', '=', 'stock.quant.package'),
- '|', ('code', '=', 'stock.scrap'),
- '|', ('code', '=', 'stock.picking'),
- '|', ('prefix', '=', 'WH/IN/'),
- '|', ('prefix', '=', 'WH/INT/'),
- '|', ('prefix', '=', 'WH/OUT/'),
- '|', ('prefix', '=', 'WH/PACK/'),
- ('prefix', '=', 'WH/PICK/')
- ])
-
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- sql = "update ir_sequence set number_next=1 where (" \
- "code ='stock.lot.serial' " \
- "or code ='stock.lot.tracking' " \
- "or code ='stock.orderpoint'" \
- "or code ='stock.picking'" \
- "or code ='stock.quant.package'" \
- "or code ='stock.scrap'" \
- "or code ='stock.picking'" \
- "or prefix ='WH/IN/'" \
- "or prefix ='WH/INT/'" \
- "or prefix ='WH/OUT/'" \
- "or prefix ='WH/PACK/'" \
- "or prefix ='WH/PICK/'" \
- ");"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_account(self):
- to_removes = [
- # 清除财务会计单据
- ['account.voucher.line', ],
- ['account.voucher', ],
- ['account.bank.statement', ],
- ['account.bank.statement.line', ],
- ['account.payment', ],
- ['account.analytic.line', ],
- ['account.invoice.line', ],
- ['account.invoice', ],
- ['account.partial.reconcile', ],
- ['account.move.line', ],
- ['account.move', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
-
- # 更新序号
- seqs = self.env['ir.sequence'].search([
- '|', ('code', '=', 'account.reconcile'),
- '|', ('code', '=', 'account.payment.customer.invoice'),
- '|', ('code', '=', 'account.payment.customer.refund'),
- '|', ('code', '=', 'account.payment.supplier.invoice'),
- '|', ('code', '=', 'account.payment.supplier.refund'),
- '|', ('code', '=', 'account.payment.transfer'),
- '|', ('prefix', 'like', 'BNK1/'),
- '|', ('prefix', 'like', 'CSH1/'),
- '|', ('prefix', 'like', 'INV/'),
- '|', ('prefix', 'like', 'EXCH/'),
- '|', ('prefix', 'like', 'MISC/'),
- '|', ('prefix', 'like', u'账单/'),
- ('prefix', 'like', u'杂项/')
- ])
-
- for seq in seqs:
- seq.write({
- 'number_next': 1,
- })
- # todo: 帐单 or BILL/%
- sql = "update ir_sequence set number_next=1 where (" \
- "code ='account.reconcile' " \
- "or code ='account.payment.customer.invoice' " \
- "or code ='account.payment.customer.refund' " \
- "or code ='account.payment.supplier.invoice' " \
- "or code ='account.payment.supplier.refund' " \
- "or prefix like 'BNK1/%'" \
- "or prefix like 'CSH1/%'" \
- "or prefix like 'INV/%'" \
- "or prefix like 'EXCH/%'" \
- "or prefix like 'MISC/%'" \
- "or prefix like '账单/%'" \
- "or prefix like '杂项/%'" \
- ");"
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_message(self):
- to_removes = [
- # 清除消息数据
- ['mail.message', ],
- ['mail.followers', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
- except Exception, e:
- raise Warning(e)
- return True
-
- @api.multi
- def remove_workflow(self):
- to_removes = [
- # 清除工作流
- ['wkf.workitem', ],
- ['wkf.instance', ],
- ]
- try:
- for line in to_removes :
- obj_name = line[0]
- obj = self.pool.get(obj_name)
- if obj and obj._table_exist:
- sql = "delete from %s" % obj._table
- self._cr.execute(sql)
-
- except Exception, e:
- raise Warning(e)
- return True
diff --git a/app_odoo_customize/models/base_language_install.py b/app_odoo_customize/models/base_language_install.py
deleted file mode 100644
index 727dd549..00000000
--- a/app_odoo_customize/models/base_language_install.py
+++ /dev/null
@@ -1,21 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2017 Jarvis (www.odoomod.com)
-# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
-
-from openerp import api, fields, models, _
-
-
-class BaseLanguageInstall(models.TransientModel):
- _inherit = "base.language.install"
-
- @api.multi
- def lang_install(self):
- self.ensure_one()
- self.env.cr.execute("""
- delete from ir_translation
- where (name='ir.module.module,shortdesc'
- or name='ir.module.module,description'
- or name='ir.module.module,summary')
- and lang=%s
- """, (self.lang,))
- return super(BaseLanguageInstall, self).lang_install()
diff --git a/app_odoo_customize/models/ir_ui_view.py b/app_odoo_customize/models/ir_ui_view.py
deleted file mode 100644
index eca8ed13..00000000
--- a/app_odoo_customize/models/ir_ui_view.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import logging
-
-from openerp import api, fields, models, _
-
-_logger = logging.getLogger(__name__)
-
-class View(models.Model):
- _inherit = 'ir.ui.view'
-
- @api.model
- def render_template(self, template, values=None, engine='ir.qweb'):
- if template in ['web.login', 'web.webclient_bootstrap']:
- if not values:
- values = {}
- values["title"] = self.env['ir.config_parameter'].get_param("app_system_name", "odooApp")
- return super(View, self).render_template(template, values=values, engine=engine)
\ No newline at end of file
diff --git a/app_odoo_customize/models/mail_thread.py b/app_odoo_customize/models/mail_thread.py
deleted file mode 100644
index ec59b6e6..00000000
--- a/app_odoo_customize/models/mail_thread.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright 2017 Jarvis (www.odoomod.com)
-# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
-
-from openerp import api, fields, models, _
-
-
-class MailThread(models.AbstractModel):
- _inherit = "mail.thread"
-
- @api.multi
- def message_subscribe(self, partner_ids=None, channel_ids=None, subtype_ids=None, force=True):
- """ 停用订阅功能. """
- ir_config = self.env['ir.config_parameter']
- app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False
- if app_stop_subscribe:
- return
- else:
- return super(MailThread, self).message_subscribe(partner_ids, channel_ids, subtype_ids, force)
-
- @api.multi
- def message_auto_subscribe(self, updated_fields, values=None):
- """ 停用订阅功能. """
- ir_config = self.env['ir.config_parameter']
- app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False
- if app_stop_subscribe:
- return
- else:
- return super(MailThread, self).message_auto_subscribe(updated_fields, values)
-
- @api.multi
- def _message_auto_subscribe_notify(self, partner_ids):
- """ 停用订阅功能. """
- ir_config = self.env['ir.config_parameter']
- app_stop_subscribe = True if ir_config.get_param('app_stop_subscribe') == "True" else False
- if app_stop_subscribe:
- return
- else:
- return super(MailThread, self)._message_auto_subscribe_notify(partner_ids)
\ No newline at end of file
diff --git a/app_odoo_customize/readme.md b/app_odoo_customize/readme.md
deleted file mode 100644
index dcde3067..00000000
--- a/app_odoo_customize/readme.md
+++ /dev/null
@@ -1,60 +0,0 @@
-##App Odoo Customize(Debranding Title,Language,Documentation,Quick Debug,Quick Data Clear)
-============
-White label odoo.
-You can config odoo, make it look like your own platform.
-1. Deletes Odoo label in footer
-2. Replaces "Odoo" in Windows title
-3. Customize Documentation, Support, About links and title in usermenu
-4. Adds "Developer mode" link to the top right-hand User Menu.
-5. Adds Quick Language Switcher to the top right-hand User Menu.
-6. Adds Country flags to the top right-hand User Menu.
-7. Adds English and Chinese user documentation access to the top right-hand User Menu.
-8. Adds developer documentation access to the top right-hand User Menu.
-9. Customize "My odoo.com account" button
-10. Standalone setting panel, easy to setup.
-11. Provide 236 country flags.
-12. Multi-language Support.
-13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15)
-14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc.
-15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice...
-16. Fix odoo reload module translation bug while enable english language
-17. Stop Odoo Auto Subscribe(Performance Improve)
-This module can help to white label the Odoo.
-Also helpful for training and support for your odoo end-user.
-The user can get the help document just by one click.
-
-For more support
-http://www.sunpop.cn
-
-## 在符合odoo开源协议的前提下,去除odoo版权信息,自定义你的odoo
-可完全自行设置下列 odoo 选项,让 odoo 看上去像是你的软件产品
-1. 删除菜单导航页脚的 Odoo 标签
-2. 将弹出窗口中 "Odoo" 设置为自定义名称
-3. 自定义用户菜单中的 Documentation, Support, About 的链接
-4. 在用户菜单中增加快速切换开发模式
-5. 在用户菜单中增加快速切换多国语言
-6. 对语言菜单进行美化,设置国旗图标
-7. 在用户菜单中增加中/英文用户手册,可以不用翻墙加速了
-8. 在用户菜单中增加开发者手册,含python教程,jquery参考,Jinja2模板,PostgresSQL参考
-9. 在用户菜单中自定义"My odoo.com account"
-10. 单独设置面板,每个选项都可以自定义
-11. 提供236个国家的国旗文件(部份需要自行设置文件名)
-12. 多语言版本
-13. 自定义登陆界面中的 Powered by Odoo
-14. 快速删除测试数据,支持模块包括:销售/POS门店/采购/生产/库存/会计/消息与工作流等.
-15. 将各类单据的序号重置,从1开始,包括:SO/PO/MO/Invoice 等
-16. 修复odoo启用英文后模块不显示中文的Bug
-17. 可停用odoo自动订阅功能,避免“同样对象关注2次”bug,同时提升性能
-
-使用方法:将解压后的 app_odoo_customize 放到 odoo的 addons目录下,激活开发者模式,应用-->更新应用列表,
-找到 "App odoo Customize"模块,安装即可。
-
-## 其它技术资源:
-#### odoo10-windows64位高性能最新绿色版下载及制作方法-提速50%
-http://www.sunpop.cn/odoo10_fast_x64_download/
-#### Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-#### Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-
diff --git a/app_odoo_customize/static/description/banner.png b/app_odoo_customize/static/description/banner.png
deleted file mode 100644
index 6bd0fba1..00000000
Binary files a/app_odoo_customize/static/description/banner.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/cnreadme.png b/app_odoo_customize/static/description/cnreadme.png
deleted file mode 100644
index d76676e0..00000000
Binary files a/app_odoo_customize/static/description/cnreadme.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/icon.png b/app_odoo_customize/static/description/icon.png
deleted file mode 100644
index 4c57f611..00000000
Binary files a/app_odoo_customize/static/description/icon.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/index.html b/app_odoo_customize/static/description/index.html
deleted file mode 100644
index 565c9e10..00000000
--- a/app_odoo_customize/static/description/index.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
App Odoo Customize
-
-
This moduld allows user to quickly customize and debranding Odoo. Quick debug, Language Switcher,
- Online Documentation Access,Quick Data Clear.
-
More Powerful UI addons:
- App UI enhance
-
-
-
Lastest update: v10.0.2.4, 2018-02-04
-
- 1. Deletes Odoo label in footer
- 2. Replaces "Odoo" in Windows title
- 3. Customize Documentation, Support, About links and title in usermenu
- 4. Adds "Developer mode" link to the top right-hand User Menu.
- 5. Adds Quick Language Switcher to the top right-hand User Menu.
- 6. Adds Country flags to the top right-hand User Menu.
- 7. Adds English and Chinese user documentation access to the top right-hand User Menu.
- 8. Adds developer documentation access to the top right-hand User Menu.
- 9. Customize "My odoo.com account" button
- 10. Standalone setting panel, easy to setup.
- 11. Provide 236 country flags.
- 12. Multi-language Support.
- 13. Change Powered by Odoo in login screen.(Please change '../views/app_odoo_customize_view.xml' #15)
- 14. Quick delete test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Base Models.
- 15. Reset All the Sequence to beginning of 1: SO/PO/MO/Invoice...
- 16. Fix odoo reload module translation bug while enable english language
- 17. Stop Odoo Auto Subscribe(Performance Improve)
-
-
- This module can help to white label the Odoo.
- Also helpful for training and support for your odoo end-user.
- The user can get the help document just by one click.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Odoo Customize(Debranding Title,Language,Documentation,Quick Debug)
-
-
-
-
-
-
-
-
-
Multi-language support: Chinese ready
-
-
-
-
-
-
-
-
-
-
-
-
How to use: Go to Settings -> odooApp Settings
-
-
-
-
-
-
-
-
-
-
Setup more flags: just rename the flag pic to locale code of the country
-
You can find the pictures in "\app-odoo\app_odoo_customize\static\src\img\flags"
-
-
-
-
-
-
-
-
-
-
Quick Delete test Data.
-
You can quickly delete all the test data in Apps: Sales/POS/Purchase/MRP/Inventory/Accounting/Message/Workflow etc.
-
-
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
-
diff --git a/app_odoo_customize/static/description/set1.png b/app_odoo_customize/static/description/set1.png
deleted file mode 100644
index b68f7abe..00000000
Binary files a/app_odoo_customize/static/description/set1.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/set11.png b/app_odoo_customize/static/description/set11.png
deleted file mode 100644
index 3f004c03..00000000
Binary files a/app_odoo_customize/static/description/set11.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/set12.png b/app_odoo_customize/static/description/set12.png
deleted file mode 100644
index bda7ea1b..00000000
Binary files a/app_odoo_customize/static/description/set12.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/set2.png b/app_odoo_customize/static/description/set2.png
deleted file mode 100644
index 896f33b1..00000000
Binary files a/app_odoo_customize/static/description/set2.png and /dev/null differ
diff --git a/app_odoo_customize/static/description/set3.png b/app_odoo_customize/static/description/set3.png
deleted file mode 100644
index 0c2edc58..00000000
Binary files a/app_odoo_customize/static/description/set3.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/css/app.css b/app_odoo_customize/static/src/css/app.css
deleted file mode 100644
index bc4301a5..00000000
--- a/app_odoo_customize/static/src/css/app.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.o_user_menu .dropdown-menu img {
- height: 20px;
- margin: 2px;
-}
\ No newline at end of file
diff --git a/app_odoo_customize/static/src/img/flags/de_DE.png b/app_odoo_customize/static/src/img/flags/de_DE.png
deleted file mode 100644
index 5bcb0b2b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/de_DE.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/en_US.png b/app_odoo_customize/static/src/img/flags/en_US.png
deleted file mode 100644
index 5c4f03e2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/en_US.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png b/app_odoo_customize/static/src/img/flags/es_ES.png
deleted file mode 100644
index 0c9580b0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD b/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD
deleted file mode 100644
index 0c9580b0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png~HEAD and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0 b/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0
deleted file mode 100644
index 0c9580b0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/es_ES.png~origin_10.0 and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_afghanistan.png b/app_odoo_customize/static/src/img/flags/flag_afghanistan.png
deleted file mode 100644
index e5ee97f1..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_afghanistan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_albania.png b/app_odoo_customize/static/src/img/flags/flag_albania.png
deleted file mode 100644
index 8aac6dce..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_albania.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_algeria.png b/app_odoo_customize/static/src/img/flags/flag_algeria.png
deleted file mode 100644
index afaf8142..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_algeria.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_american_samoa.png b/app_odoo_customize/static/src/img/flags/flag_american_samoa.png
deleted file mode 100644
index 49a77ce6..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_american_samoa.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_andorra.png b/app_odoo_customize/static/src/img/flags/flag_andorra.png
deleted file mode 100644
index b1fb0225..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_andorra.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_angola.png b/app_odoo_customize/static/src/img/flags/flag_angola.png
deleted file mode 100644
index d16b690f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_angola.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_anguilla.png b/app_odoo_customize/static/src/img/flags/flag_anguilla.png
deleted file mode 100644
index b63d5f43..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_anguilla.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png b/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png
deleted file mode 100644
index 1ed51774..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_antigua_and_barbuda.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_argentina.png b/app_odoo_customize/static/src/img/flags/flag_argentina.png
deleted file mode 100644
index 3adecbad..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_argentina.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_armenia.png b/app_odoo_customize/static/src/img/flags/flag_armenia.png
deleted file mode 100644
index e819b9b5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_armenia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_aruba.png b/app_odoo_customize/static/src/img/flags/flag_aruba.png
deleted file mode 100644
index 35cd54d6..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_aruba.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_australia.png b/app_odoo_customize/static/src/img/flags/flag_australia.png
deleted file mode 100644
index 8108cc37..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_australia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_austria.png b/app_odoo_customize/static/src/img/flags/flag_austria.png
deleted file mode 100644
index 0993dfa8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_austria.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png b/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png
deleted file mode 100644
index e0d7c6a7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_azerbaijan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bahamas.png b/app_odoo_customize/static/src/img/flags/flag_bahamas.png
deleted file mode 100644
index 5b75d213..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bahamas.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bahrain.png b/app_odoo_customize/static/src/img/flags/flag_bahrain.png
deleted file mode 100644
index 131c494a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bahrain.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bangladesh.png b/app_odoo_customize/static/src/img/flags/flag_bangladesh.png
deleted file mode 100644
index 14ccd4c7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bangladesh.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_barbados.png b/app_odoo_customize/static/src/img/flags/flag_barbados.png
deleted file mode 100644
index 1923c7a5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_barbados.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_belarus.png b/app_odoo_customize/static/src/img/flags/flag_belarus.png
deleted file mode 100644
index 5d098126..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_belarus.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_belgium.png b/app_odoo_customize/static/src/img/flags/flag_belgium.png
deleted file mode 100644
index d19bd942..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_belgium.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_belize.png b/app_odoo_customize/static/src/img/flags/flag_belize.png
deleted file mode 100644
index e5c30ded..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_belize.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_benin.png b/app_odoo_customize/static/src/img/flags/flag_benin.png
deleted file mode 100644
index 500fd032..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_benin.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bermuda.png b/app_odoo_customize/static/src/img/flags/flag_bermuda.png
deleted file mode 100644
index f44a1100..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bermuda.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bhutan.png b/app_odoo_customize/static/src/img/flags/flag_bhutan.png
deleted file mode 100644
index 94c81a9e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bhutan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bolivia.png b/app_odoo_customize/static/src/img/flags/flag_bolivia.png
deleted file mode 100644
index e44677a1..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bolivia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png b/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png
deleted file mode 100644
index d3595a50..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bosnia_and_herzegovina.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_botswana.png b/app_odoo_customize/static/src/img/flags/flag_botswana.png
deleted file mode 100644
index b458e964..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_botswana.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_brazil.png b/app_odoo_customize/static/src/img/flags/flag_brazil.png
deleted file mode 100644
index 9b01d07d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_brazil.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png b/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png
deleted file mode 100644
index 4ca19cfb..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_british_indian_ocean_territory.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png b/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png
deleted file mode 100644
index 5b88c96a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_british_virgin_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_brunei.png b/app_odoo_customize/static/src/img/flags/flag_brunei.png
deleted file mode 100644
index 433a7465..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_brunei.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_bulgaria.png b/app_odoo_customize/static/src/img/flags/flag_bulgaria.png
deleted file mode 100644
index 8716c7a0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_bulgaria.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png b/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png
deleted file mode 100644
index 9d105b7e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_burkina_faso.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_burma.png b/app_odoo_customize/static/src/img/flags/flag_burma.png
deleted file mode 100644
index 31a5fc27..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_burma.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_burundi.png b/app_odoo_customize/static/src/img/flags/flag_burundi.png
deleted file mode 100644
index 7a11bf80..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_burundi.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cambodia.png b/app_odoo_customize/static/src/img/flags/flag_cambodia.png
deleted file mode 100644
index 4b313803..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cambodia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cameroon.png b/app_odoo_customize/static/src/img/flags/flag_cameroon.png
deleted file mode 100644
index e5b98fd6..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cameroon.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_canada.png b/app_odoo_customize/static/src/img/flags/flag_canada.png
deleted file mode 100644
index 30e76b08..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_canada.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cape_verde.png b/app_odoo_customize/static/src/img/flags/flag_cape_verde.png
deleted file mode 100644
index a12b2618..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cape_verde.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png b/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png
deleted file mode 100644
index 2751dd1c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cayman_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png b/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png
deleted file mode 100644
index 5ce7df13..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_central_african_republic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_chad.png b/app_odoo_customize/static/src/img/flags/flag_chad.png
deleted file mode 100644
index 250ea6f4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_chad.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_checkered.png b/app_odoo_customize/static/src/img/flags/flag_checkered.png
deleted file mode 100644
index 128d5d78..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_checkered.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_chile.png b/app_odoo_customize/static/src/img/flags/flag_chile.png
deleted file mode 100644
index 85d3a6c8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_chile.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_colombia.png b/app_odoo_customize/static/src/img/flags/flag_colombia.png
deleted file mode 100644
index 736d7618..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_colombia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_comoros.png b/app_odoo_customize/static/src/img/flags/flag_comoros.png
deleted file mode 100644
index c09c3927..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_comoros.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png b/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png
deleted file mode 100644
index 4091ed9a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_congo_democratic_republic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_congo_republic.png b/app_odoo_customize/static/src/img/flags/flag_congo_republic.png
deleted file mode 100644
index 2f4795aa..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_congo_republic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cook_islands.png b/app_odoo_customize/static/src/img/flags/flag_cook_islands.png
deleted file mode 100644
index f337d0c9..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cook_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_costa_rica.png b/app_odoo_customize/static/src/img/flags/flag_costa_rica.png
deleted file mode 100644
index 361a65fe..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_costa_rica.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png b/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png
deleted file mode 100644
index 536abd6a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cote_divoire.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_croatia.png b/app_odoo_customize/static/src/img/flags/flag_croatia.png
deleted file mode 100644
index 1471bf15..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_croatia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cuba.png b/app_odoo_customize/static/src/img/flags/flag_cuba.png
deleted file mode 100644
index e5b23f52..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cuba.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_cyprus.png b/app_odoo_customize/static/src/img/flags/flag_cyprus.png
deleted file mode 100644
index 1d30fa97..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_cyprus.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_czech_republic.png b/app_odoo_customize/static/src/img/flags/flag_czech_republic.png
deleted file mode 100644
index 6c5556a8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_czech_republic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_denmark.png b/app_odoo_customize/static/src/img/flags/flag_denmark.png
deleted file mode 100644
index c9e4450b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_denmark.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_djibouti.png b/app_odoo_customize/static/src/img/flags/flag_djibouti.png
deleted file mode 100644
index db95c50b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_djibouti.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_dominica.png b/app_odoo_customize/static/src/img/flags/flag_dominica.png
deleted file mode 100644
index d2dc6374..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_dominica.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png b/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png
deleted file mode 100644
index 29970e73..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_dominican_republic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_east_timor.png b/app_odoo_customize/static/src/img/flags/flag_east_timor.png
deleted file mode 100644
index 1553f1e5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_east_timor.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_ecuador.png b/app_odoo_customize/static/src/img/flags/flag_ecuador.png
deleted file mode 100644
index 0273da66..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_ecuador.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_egypt.png b/app_odoo_customize/static/src/img/flags/flag_egypt.png
deleted file mode 100644
index ebe257ad..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_egypt.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_el_salvador.png b/app_odoo_customize/static/src/img/flags/flag_el_salvador.png
deleted file mode 100644
index 0c114b89..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_el_salvador.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_england.png b/app_odoo_customize/static/src/img/flags/flag_england.png
deleted file mode 100644
index 41940377..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_england.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png b/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png
deleted file mode 100644
index 5bf6458b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_equatorial_guinea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_eritrea.png b/app_odoo_customize/static/src/img/flags/flag_eritrea.png
deleted file mode 100644
index 6e7e770e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_eritrea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_estonia.png b/app_odoo_customize/static/src/img/flags/flag_estonia.png
deleted file mode 100644
index 5ef87c07..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_estonia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_ethiopia.png b/app_odoo_customize/static/src/img/flags/flag_ethiopia.png
deleted file mode 100644
index 5330161f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_ethiopia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_eu.png b/app_odoo_customize/static/src/img/flags/flag_eu.png
deleted file mode 100644
index 7b67730d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_eu.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png b/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png
deleted file mode 100644
index 5d781a32..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_faeroe_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png b/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png
deleted file mode 100644
index 788bee08..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_falkland_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_fiji.png b/app_odoo_customize/static/src/img/flags/flag_fiji.png
deleted file mode 100644
index ffc11731..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_fiji.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_finland.png b/app_odoo_customize/static/src/img/flags/flag_finland.png
deleted file mode 100644
index 24f113ec..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_finland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png b/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png
deleted file mode 100644
index 43b6698f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_french_polynesia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_gabon.png b/app_odoo_customize/static/src/img/flags/flag_gabon.png
deleted file mode 100644
index bfdc1ea7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_gabon.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_gambia.png b/app_odoo_customize/static/src/img/flags/flag_gambia.png
deleted file mode 100644
index 62194b7d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_gambia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_generic.png b/app_odoo_customize/static/src/img/flags/flag_generic.png
deleted file mode 100644
index c12b24df..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_generic.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_georgia.png b/app_odoo_customize/static/src/img/flags/flag_georgia.png
deleted file mode 100644
index 09dae1d4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_georgia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_ghana.png b/app_odoo_customize/static/src/img/flags/flag_ghana.png
deleted file mode 100644
index e985e9ce..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_ghana.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_gibraltar.png b/app_odoo_customize/static/src/img/flags/flag_gibraltar.png
deleted file mode 100644
index 731a99a2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_gibraltar.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_greece.png b/app_odoo_customize/static/src/img/flags/flag_greece.png
deleted file mode 100644
index 7d5f7019..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_greece.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_greenland.png b/app_odoo_customize/static/src/img/flags/flag_greenland.png
deleted file mode 100644
index 94ccb785..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_greenland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_grenada.png b/app_odoo_customize/static/src/img/flags/flag_grenada.png
deleted file mode 100644
index 6555c1b7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_grenada.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guam.png b/app_odoo_customize/static/src/img/flags/flag_guam.png
deleted file mode 100644
index 271cd8cc..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guam.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guatemala.png b/app_odoo_customize/static/src/img/flags/flag_guatemala.png
deleted file mode 100644
index 139e648b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guatemala.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guernsey.png b/app_odoo_customize/static/src/img/flags/flag_guernsey.png
deleted file mode 100644
index e45ae1d8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guernsey.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guinea.png b/app_odoo_customize/static/src/img/flags/flag_guinea.png
deleted file mode 100644
index 99839874..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guinea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png b/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png
deleted file mode 100644
index 9d743983..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guinea_bissau.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_guyana.png b/app_odoo_customize/static/src/img/flags/flag_guyana.png
deleted file mode 100644
index 0d9bb963..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_guyana.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_haiti.png b/app_odoo_customize/static/src/img/flags/flag_haiti.png
deleted file mode 100644
index 4b4eb300..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_haiti.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_honduras.png b/app_odoo_customize/static/src/img/flags/flag_honduras.png
deleted file mode 100644
index 62b85fa7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_honduras.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_hong_kong.png b/app_odoo_customize/static/src/img/flags/flag_hong_kong.png
deleted file mode 100644
index 8426e7cc..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_hong_kong.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_hungary.png b/app_odoo_customize/static/src/img/flags/flag_hungary.png
deleted file mode 100644
index d903f3dc..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_hungary.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_iceland.png b/app_odoo_customize/static/src/img/flags/flag_iceland.png
deleted file mode 100644
index 2fc4f7ab..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_iceland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_india.png b/app_odoo_customize/static/src/img/flags/flag_india.png
deleted file mode 100644
index ceb9971c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_india.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_indonesia.png b/app_odoo_customize/static/src/img/flags/flag_indonesia.png
deleted file mode 100644
index aff745b5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_indonesia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_iran.png b/app_odoo_customize/static/src/img/flags/flag_iran.png
deleted file mode 100644
index cc6acabe..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_iran.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_iraq.png b/app_odoo_customize/static/src/img/flags/flag_iraq.png
deleted file mode 100644
index 570f8994..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_iraq.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_ireland.png b/app_odoo_customize/static/src/img/flags/flag_ireland.png
deleted file mode 100644
index 75c91bed..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_ireland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png b/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png
deleted file mode 100644
index 1f761fee..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_isle_of_man.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_israel.png b/app_odoo_customize/static/src/img/flags/flag_israel.png
deleted file mode 100644
index b05ebc26..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_israel.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_italy.png b/app_odoo_customize/static/src/img/flags/flag_italy.png
deleted file mode 100644
index f6aa615e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_italy.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_jamaica.png b/app_odoo_customize/static/src/img/flags/flag_jamaica.png
deleted file mode 100644
index 3a422e62..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_jamaica.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_japan.png b/app_odoo_customize/static/src/img/flags/flag_japan.png
deleted file mode 100644
index 066ab4d8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_japan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_jersey.png b/app_odoo_customize/static/src/img/flags/flag_jersey.png
deleted file mode 100644
index 03f648fb..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_jersey.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_jordan.png b/app_odoo_customize/static/src/img/flags/flag_jordan.png
deleted file mode 100644
index 6d680054..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_jordan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png b/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png
deleted file mode 100644
index e1562a65..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_kazakhstan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_kenya.png b/app_odoo_customize/static/src/img/flags/flag_kenya.png
deleted file mode 100644
index 14a202cf..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_kenya.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_kiribati.png b/app_odoo_customize/static/src/img/flags/flag_kiribati.png
deleted file mode 100644
index f5b08a25..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_kiribati.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_kuwait.png b/app_odoo_customize/static/src/img/flags/flag_kuwait.png
deleted file mode 100644
index 82357429..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_kuwait.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png b/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png
deleted file mode 100644
index b4974f47..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_kyrgyzstan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_laos.png b/app_odoo_customize/static/src/img/flags/flag_laos.png
deleted file mode 100644
index 665aa7d8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_laos.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_latvia.png b/app_odoo_customize/static/src/img/flags/flag_latvia.png
deleted file mode 100644
index b466aa7f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_latvia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_lebanon.png b/app_odoo_customize/static/src/img/flags/flag_lebanon.png
deleted file mode 100644
index 6e170b1d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_lebanon.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_lesotho.png b/app_odoo_customize/static/src/img/flags/flag_lesotho.png
deleted file mode 100644
index f6ee22d8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_lesotho.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_liberia.png b/app_odoo_customize/static/src/img/flags/flag_liberia.png
deleted file mode 100644
index d4c10fc4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_liberia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_libya.png b/app_odoo_customize/static/src/img/flags/flag_libya.png
deleted file mode 100644
index 14f9a3a3..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_libya.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png b/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png
deleted file mode 100644
index a2f5fc0b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_liechtenstein.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_lithuania.png b/app_odoo_customize/static/src/img/flags/flag_lithuania.png
deleted file mode 100644
index 709383fc..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_lithuania.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_luxembourg.png b/app_odoo_customize/static/src/img/flags/flag_luxembourg.png
deleted file mode 100644
index dc4814f8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_luxembourg.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_macau.png b/app_odoo_customize/static/src/img/flags/flag_macau.png
deleted file mode 100644
index cf60bb75..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_macau.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_macedonia.png b/app_odoo_customize/static/src/img/flags/flag_macedonia.png
deleted file mode 100644
index 2d9a8ae7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_macedonia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_madagascar.png b/app_odoo_customize/static/src/img/flags/flag_madagascar.png
deleted file mode 100644
index 2e84d6ee..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_madagascar.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_malawi.png b/app_odoo_customize/static/src/img/flags/flag_malawi.png
deleted file mode 100644
index a17c4519..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_malawi.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_malaysia.png b/app_odoo_customize/static/src/img/flags/flag_malaysia.png
deleted file mode 100644
index 1eeb7be3..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_malaysia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_maldives.png b/app_odoo_customize/static/src/img/flags/flag_maldives.png
deleted file mode 100644
index d9d72e23..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_maldives.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mali.png b/app_odoo_customize/static/src/img/flags/flag_mali.png
deleted file mode 100644
index cae153fe..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mali.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_malta.png b/app_odoo_customize/static/src/img/flags/flag_malta.png
deleted file mode 100644
index 736aa4ca..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_malta.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png b/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png
deleted file mode 100644
index 082eb763..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_marshall_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_martinique.png b/app_odoo_customize/static/src/img/flags/flag_martinique.png
deleted file mode 100644
index a20c9b38..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_martinique.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mauritania.png b/app_odoo_customize/static/src/img/flags/flag_mauritania.png
deleted file mode 100644
index 03db77f7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mauritania.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mauritius.png b/app_odoo_customize/static/src/img/flags/flag_mauritius.png
deleted file mode 100644
index 5336f591..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mauritius.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mexico.png b/app_odoo_customize/static/src/img/flags/flag_mexico.png
deleted file mode 100644
index 539739fe..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mexico.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_micronesia.png b/app_odoo_customize/static/src/img/flags/flag_micronesia.png
deleted file mode 100644
index dfda47ee..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_micronesia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_moldova.png b/app_odoo_customize/static/src/img/flags/flag_moldova.png
deleted file mode 100644
index e7ee75db..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_moldova.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_monaco.png b/app_odoo_customize/static/src/img/flags/flag_monaco.png
deleted file mode 100644
index b51dc7f6..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_monaco.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mongolia.png b/app_odoo_customize/static/src/img/flags/flag_mongolia.png
deleted file mode 100644
index 825a0c29..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mongolia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_montenegro.png b/app_odoo_customize/static/src/img/flags/flag_montenegro.png
deleted file mode 100644
index 8d1ad79b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_montenegro.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_montserrat.png b/app_odoo_customize/static/src/img/flags/flag_montserrat.png
deleted file mode 100644
index 53b21152..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_montserrat.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_morocco.png b/app_odoo_customize/static/src/img/flags/flag_morocco.png
deleted file mode 100644
index 193f0cd2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_morocco.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_mozambique.png b/app_odoo_customize/static/src/img/flags/flag_mozambique.png
deleted file mode 100644
index e8051d3c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_mozambique.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_namibia.png b/app_odoo_customize/static/src/img/flags/flag_namibia.png
deleted file mode 100644
index ebaa9ce1..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_namibia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_nauru.png b/app_odoo_customize/static/src/img/flags/flag_nauru.png
deleted file mode 100644
index c8cbecc4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_nauru.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_nepal.png b/app_odoo_customize/static/src/img/flags/flag_nepal.png
deleted file mode 100644
index c43e96da..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_nepal.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_netherlands.png b/app_odoo_customize/static/src/img/flags/flag_netherlands.png
deleted file mode 100644
index e566685f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_netherlands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png b/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png
deleted file mode 100644
index c1fbf588..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_netherlands_antilles.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_new_zealand.png b/app_odoo_customize/static/src/img/flags/flag_new_zealand.png
deleted file mode 100644
index 2ed6512e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_new_zealand.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_nicaragua.png b/app_odoo_customize/static/src/img/flags/flag_nicaragua.png
deleted file mode 100644
index e48abf3b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_nicaragua.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_niger.png b/app_odoo_customize/static/src/img/flags/flag_niger.png
deleted file mode 100644
index a54b1d8b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_niger.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_nigeria.png b/app_odoo_customize/static/src/img/flags/flag_nigeria.png
deleted file mode 100644
index afdc0fbd..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_nigeria.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_niue.png b/app_odoo_customize/static/src/img/flags/flag_niue.png
deleted file mode 100644
index ec9fa49a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_niue.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png b/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png
deleted file mode 100644
index 7dcad5b0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_norfolk_island.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_north_korea.png b/app_odoo_customize/static/src/img/flags/flag_north_korea.png
deleted file mode 100644
index 4df5f0a4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_north_korea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png b/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png
deleted file mode 100644
index 3da7c7c0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_northern_mariana_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_norway.png b/app_odoo_customize/static/src/img/flags/flag_norway.png
deleted file mode 100644
index f1e64f75..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_norway.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_oman.png b/app_odoo_customize/static/src/img/flags/flag_oman.png
deleted file mode 100644
index a50864e3..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_oman.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_pakistan.png b/app_odoo_customize/static/src/img/flags/flag_pakistan.png
deleted file mode 100644
index e4633af1..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_pakistan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_palau.png b/app_odoo_customize/static/src/img/flags/flag_palau.png
deleted file mode 100644
index 2425cbf4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_palau.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_panama.png b/app_odoo_customize/static/src/img/flags/flag_panama.png
deleted file mode 100644
index 1fdbc11f..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_panama.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png b/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png
deleted file mode 100644
index cc0455c7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_papua_new_guinea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_paraguay.png b/app_odoo_customize/static/src/img/flags/flag_paraguay.png
deleted file mode 100644
index e3b76cee..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_paraguay.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_peru.png b/app_odoo_customize/static/src/img/flags/flag_peru.png
deleted file mode 100644
index a40226fd..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_peru.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_philippines.png b/app_odoo_customize/static/src/img/flags/flag_philippines.png
deleted file mode 100644
index d847f8c1..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_philippines.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_pirate.png b/app_odoo_customize/static/src/img/flags/flag_pirate.png
deleted file mode 100644
index bc493602..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_pirate.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png b/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png
deleted file mode 100644
index f2b9b5e2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_pitcairn_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_poland.png b/app_odoo_customize/static/src/img/flags/flag_poland.png
deleted file mode 100644
index 9fb2f6aa..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_poland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_portugal.png b/app_odoo_customize/static/src/img/flags/flag_portugal.png
deleted file mode 100644
index c3de0b19..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_portugal.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png b/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png
deleted file mode 100644
index 3c995992..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_puerto_rico.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_qatar.png b/app_odoo_customize/static/src/img/flags/flag_qatar.png
deleted file mode 100644
index 902fc4d5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_qatar.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_rainbow.png b/app_odoo_customize/static/src/img/flags/flag_rainbow.png
deleted file mode 100644
index 78fc721c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_rainbow.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_romania.png b/app_odoo_customize/static/src/img/flags/flag_romania.png
deleted file mode 100644
index 4e7f9f13..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_romania.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_rwanda.png b/app_odoo_customize/static/src/img/flags/flag_rwanda.png
deleted file mode 100644
index 444c8c79..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_rwanda.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_helena.png b/app_odoo_customize/static/src/img/flags/flag_saint_helena.png
deleted file mode 100644
index 82a3b598..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_helena.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png b/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png
deleted file mode 100644
index 796827d5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_kitts_and_nevis.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png b/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png
deleted file mode 100644
index d3a719dc..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_lucia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png b/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png
deleted file mode 100644
index ef0df15c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_pierre_and_miquelon.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png b/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png
deleted file mode 100644
index 15f36674..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saint_vincent_and_the_grenadines.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_samoa.png b/app_odoo_customize/static/src/img/flags/flag_samoa.png
deleted file mode 100644
index 209897e4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_samoa.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_san_marino.png b/app_odoo_customize/static/src/img/flags/flag_san_marino.png
deleted file mode 100644
index a1222635..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_san_marino.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png b/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png
deleted file mode 100644
index 40534684..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_sao_tome_and_principe.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png b/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png
deleted file mode 100644
index 20061b91..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_saudi_arabia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_scotland.png b/app_odoo_customize/static/src/img/flags/flag_scotland.png
deleted file mode 100644
index bb01bc94..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_scotland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_senegal.png b/app_odoo_customize/static/src/img/flags/flag_senegal.png
deleted file mode 100644
index 1047e9be..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_senegal.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_serbia.png b/app_odoo_customize/static/src/img/flags/flag_serbia.png
deleted file mode 100644
index 255e428b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_serbia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_seychelles.png b/app_odoo_customize/static/src/img/flags/flag_seychelles.png
deleted file mode 100644
index e1a139fe..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_seychelles.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png b/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png
deleted file mode 100644
index a223c5df..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_sierra_leone.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_singapore.png b/app_odoo_customize/static/src/img/flags/flag_singapore.png
deleted file mode 100644
index a4a4a812..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_singapore.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_slovakia.png b/app_odoo_customize/static/src/img/flags/flag_slovakia.png
deleted file mode 100644
index e7c39150..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_slovakia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_slovenia.png b/app_odoo_customize/static/src/img/flags/flag_slovenia.png
deleted file mode 100644
index 85385895..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_slovenia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png b/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png
deleted file mode 100644
index fcd10c18..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_solomon_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_somalia.png b/app_odoo_customize/static/src/img/flags/flag_somalia.png
deleted file mode 100644
index 2f856d2e..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_somalia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_south_africa.png b/app_odoo_customize/static/src/img/flags/flag_south_africa.png
deleted file mode 100644
index 617fe9f4..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_south_africa.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_south_georgia.png b/app_odoo_customize/static/src/img/flags/flag_south_georgia.png
deleted file mode 100644
index d4705488..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_south_georgia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_south_korea.png b/app_odoo_customize/static/src/img/flags/flag_south_korea.png
deleted file mode 100644
index b0b21dfa..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_south_korea.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_spain.png b/app_odoo_customize/static/src/img/flags/flag_spain.png
deleted file mode 100644
index 0c9580b0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_spain.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png b/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png
deleted file mode 100644
index 3fbe5791..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_sri_lanka.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_sudan.png b/app_odoo_customize/static/src/img/flags/flag_sudan.png
deleted file mode 100644
index f607390b..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_sudan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_suriname.png b/app_odoo_customize/static/src/img/flags/flag_suriname.png
deleted file mode 100644
index d12cae84..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_suriname.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_swaziland.png b/app_odoo_customize/static/src/img/flags/flag_swaziland.png
deleted file mode 100644
index 27fdf138..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_swaziland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_sweden.png b/app_odoo_customize/static/src/img/flags/flag_sweden.png
deleted file mode 100644
index 870be17a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_sweden.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_switzerland.png b/app_odoo_customize/static/src/img/flags/flag_switzerland.png
deleted file mode 100644
index e487a0e5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_switzerland.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_syria.png b/app_odoo_customize/static/src/img/flags/flag_syria.png
deleted file mode 100644
index b7f684e0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_syria.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_tajikistan.png b/app_odoo_customize/static/src/img/flags/flag_tajikistan.png
deleted file mode 100644
index 4c66da33..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_tajikistan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_tanzania.png b/app_odoo_customize/static/src/img/flags/flag_tanzania.png
deleted file mode 100644
index f2ee2ea2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_tanzania.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_thailand.png b/app_odoo_customize/static/src/img/flags/flag_thailand.png
deleted file mode 100644
index 445da6ab..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_thailand.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_togo.png b/app_odoo_customize/static/src/img/flags/flag_togo.png
deleted file mode 100644
index 28a696ee..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_togo.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_tonga.png b/app_odoo_customize/static/src/img/flags/flag_tonga.png
deleted file mode 100644
index bb9e9afb..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_tonga.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png b/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png
deleted file mode 100644
index 25226659..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_trinidad_and_tobago.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_tunisia.png b/app_odoo_customize/static/src/img/flags/flag_tunisia.png
deleted file mode 100644
index 13bb8782..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_tunisia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_turkey.png b/app_odoo_customize/static/src/img/flags/flag_turkey.png
deleted file mode 100644
index 4e27f6a2..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_turkey.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png b/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png
deleted file mode 100644
index 981a9308..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_turkmenistan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png b/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png
deleted file mode 100644
index 8efd241c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_turks_and_caicos_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_tuvalu.png b/app_odoo_customize/static/src/img/flags/flag_tuvalu.png
deleted file mode 100644
index 6c38b44a..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_tuvalu.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_uganda.png b/app_odoo_customize/static/src/img/flags/flag_uganda.png
deleted file mode 100644
index 52ee97d8..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_uganda.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_ukraine.png b/app_odoo_customize/static/src/img/flags/flag_ukraine.png
deleted file mode 100644
index 4eac918d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_ukraine.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png b/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png
deleted file mode 100644
index 460a9d5c..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_united_arab_emirates.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png b/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png
deleted file mode 100644
index 18d5ff99..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_united_kingdom.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_uruguay.png b/app_odoo_customize/static/src/img/flags/flag_uruguay.png
deleted file mode 100644
index fa065560..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_uruguay.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png b/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png
deleted file mode 100644
index 8df3de42..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_uzbekistan.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_vanuatu.png b/app_odoo_customize/static/src/img/flags/flag_vanuatu.png
deleted file mode 100644
index 697f6212..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_vanuatu.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_vatican_city.png b/app_odoo_customize/static/src/img/flags/flag_vatican_city.png
deleted file mode 100644
index ffb303b5..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_vatican_city.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_venezuela.png b/app_odoo_customize/static/src/img/flags/flag_venezuela.png
deleted file mode 100644
index facca467..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_venezuela.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_vietnam.png b/app_odoo_customize/static/src/img/flags/flag_vietnam.png
deleted file mode 100644
index 4e89f65d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_vietnam.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png b/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png
deleted file mode 100644
index ce23e137..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_virgin_islands.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_wales.png b/app_odoo_customize/static/src/img/flags/flag_wales.png
deleted file mode 100644
index 4e30af59..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_wales.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png b/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png
deleted file mode 100644
index d97fc3f9..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_wallis_and_futuna.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_white.png b/app_odoo_customize/static/src/img/flags/flag_white.png
deleted file mode 100644
index 0efc9ee7..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_white.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_yemen.png b/app_odoo_customize/static/src/img/flags/flag_yemen.png
deleted file mode 100644
index e9dea302..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_yemen.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_zambia.png b/app_odoo_customize/static/src/img/flags/flag_zambia.png
deleted file mode 100644
index 96d06e4d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_zambia.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png b/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png
deleted file mode 100644
index 7501780d..00000000
Binary files a/app_odoo_customize/static/src/img/flags/flag_zimbabwe.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/fr_FR.png b/app_odoo_customize/static/src/img/flags/fr_FR.png
deleted file mode 100644
index ae26d3b9..00000000
Binary files a/app_odoo_customize/static/src/img/flags/fr_FR.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/ru_RU.png b/app_odoo_customize/static/src/img/flags/ru_RU.png
deleted file mode 100644
index c251d628..00000000
Binary files a/app_odoo_customize/static/src/img/flags/ru_RU.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/img/flags/zh_CN.png b/app_odoo_customize/static/src/img/flags/zh_CN.png
deleted file mode 100644
index d969efa0..00000000
Binary files a/app_odoo_customize/static/src/img/flags/zh_CN.png and /dev/null differ
diff --git a/app_odoo_customize/static/src/js/app_window_title.js b/app_odoo_customize/static/src/js/app_window_title.js
deleted file mode 100644
index b7c368af..00000000
--- a/app_odoo_customize/static/src/js/app_window_title.js
+++ /dev/null
@@ -1,12 +0,0 @@
-odoo.define('app_system_name', function (require) {
-"use strict";
-
-var WebClient = require('web.WebClient');
-WebClient.include({
- init: function() {
- this._super.apply(this, arguments);
- this.set('title_part', {"zopenerp": document.title});
- }
-});
-
-});
\ No newline at end of file
diff --git a/app_odoo_customize/static/src/js/customize_user_menu.js b/app_odoo_customize/static/src/js/customize_user_menu.js
deleted file mode 100644
index 8891bf7e..00000000
--- a/app_odoo_customize/static/src/js/customize_user_menu.js
+++ /dev/null
@@ -1,117 +0,0 @@
-odoo.define('app_odoo_customize.customize_user_menu', function (require) {
- "use strict";
- var Model = require('web.Model');
- var session = require('web.session');
-
- var UserMenu = require('web.UserMenu');
- var documentation_url;
- var documentation_dev_url;
- var support_url;
- var account_title;
- var account_url;
- UserMenu.include({
- on_menu_debug: function () {
- window.location = $.param.querystring(window.location.href, 'debug');
- },
- on_menu_debugassets: function () {
- window.location = $.param.querystring(window.location.href, 'debug=assets');
- },
- on_menu_quitdebug: function () {
- window.location.search = "?";
- },
- on_menu_documentation: function () {
- window.open(documentation_url, '_blank');
- },
- on_menu_documentation_dev: function () {
- window.open(documentation_dev_url, '_blank');
- },
- on_menu_support: function () {
- window.open(support_url, '_blank');
- },
- on_menu_account: function () {
- window.open(account_url, '_blank');
- },
- });
-
- $(document).ready(function () {
- var self = this;
- documentation_url = 'http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html';
- documentation_dev_url = 'http://www.sunpop.cn/documentation/10.0/index.html';
- support_url = 'http://www.sunpop.cn/trial';
- account_title = 'My Online Account';
- account_url = 'http://www.sunpop.cn/my-account';
- setTimeout(function () {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_debug']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False")) {
- $('[data-menu="debug"]').parent().hide();
- $('[data-menu="debugassets"]').parent().hide();
- $('[data-menu="quitdebug"]').parent().hide();
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_documentation']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('[data-menu="documentation"]').parent().hide();
- else {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_documentation_url']], ['value']]).then(function (res) {
- if (res.length >= 1) {
- _.each(res, function (item) {
- documentation_url = item['value'];
- });
- }
- });
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_documentation_dev']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('[data-menu="documentation_dev"]').parent().hide();
- else {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_documentation_dev_url']], ['value']]).then(function (res) {
- if (res.length >= 1) {
- _.each(res, function (item) {
- documentation_dev_url = item['value'];
- });
- }
- });
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_support']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('[data-menu="support"]').parent().hide();
- else {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_support_url']], ['value']]).then(function (res) {
- if (res.length >= 1) {
- _.each(res, function (item) {
- support_url = item['value'];
- });
- }
- });
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_account']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('[data-menu="account"]').parent().hide();
- else {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_account_title']], ['value']]).then(function (res) {
- if (res.length >= 1) {
- _.each(res, function (item) {
- account_title = item['value'];
- });
- }
- $('[data-menu="account"]').html(account_title);
- });
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_account_url']], ['value']]).then(function (res) {
- if (res.length >= 1) {
- _.each(res, function (item) {
- account_url = item['value'];
- });
- }
- });
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_poweredby']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('.o_sub_menu_footer').hide();
- });
- }, 2500);
- });
-})
diff --git a/app_odoo_customize/static/src/js/switch_language.js b/app_odoo_customize/static/src/js/switch_language.js
deleted file mode 100644
index 2910319f..00000000
--- a/app_odoo_customize/static/src/js/switch_language.js
+++ /dev/null
@@ -1,49 +0,0 @@
-odoo.define('app_odoo_customize.switch_language', function (require) {
- "use strict";
-
- var Model = require('web.Model');
- var session = require('web.session');
- var UserMenu = require('web.UserMenu');
-
- UserMenu.include({
- on_menu_lang: function (ev) {
- var self = this;
- var lang = ($(ev).data("lang-id"));
- new Model('res.users').call('write', [[session.uid], {'lang': lang}]).then(function () {
- self.do_action({
- type: 'ir.actions.client',
- res_model: 'res.users',
- tag: 'reload_context',
- target: 'current'
- });
- });
- return false;
- },
- });
- //
- $(document).ready(function () {
- var self = this;
- var lang_list = '';
- setTimeout(function () {
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_lang']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "False"))
- $('switch-lang').hide();
- else {
- new Model('res.lang').call('search_read', [[], ['name', 'code']]).then(function (res) {
- _.each(res, function (lang) {
- var a = '';
- if (lang['code'] === session.user_context.lang) {
- a = ' ';
- } else {
- a = '';
- }
- lang_list += '
' + lang['name'] + a + ' ';
- });
- lang_list += ' ';
- $('switch-lang').replaceWith(lang_list);
- });
- }
- });
- }, 2500);
- });
-});
diff --git a/app_odoo_customize/static/src/xml/customize_user_menu.xml b/app_odoo_customize/static/src/xml/customize_user_menu.xml
deleted file mode 100644
index 52d45cc1..00000000
--- a/app_odoo_customize/static/src/xml/customize_user_menu.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
- Activate the developer mode
-
-
- Activate the developer mode (with assets)
-
-
- Deactivate the developer mode
-
-
- Developer Manual
-
-
-
-
-
diff --git a/app_odoo_customize/views/app_odoo_customize_view.xml b/app_odoo_customize/views/app_odoo_customize_view.xml
deleted file mode 100644
index d9bb42a9..00000000
--- a/app_odoo_customize/views/app_odoo_customize_view.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Powered by odooApp
-
-
-
-
\ No newline at end of file
diff --git a/app_odoo_customize/views/app_theme_config_settings_view.xml b/app_odoo_customize/views/app_theme_config_settings_view.xml
deleted file mode 100644
index 2b115b5a..00000000
--- a/app_odoo_customize/views/app_theme_config_settings_view.xml
+++ /dev/null
@@ -1,164 +0,0 @@
-
-
-
-
- App Odoo Customize Settings
- app.theme.config.settings
-
-
-
-
-
-
- odooApp Customize
- ir.actions.act_window
- app.theme.config.settings
- form
- inline
-
-
-
-
-
-
diff --git a/app_product_sequence/__init__.py b/app_product_sequence/__init__.py
deleted file mode 100644
index 32e57aa9..00000000
--- a/app_product_sequence/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-import models
-import controllers
-from .hooks import pre_init_hook
-
diff --git a/app_product_sequence/__openerp__.py b/app_product_sequence/__openerp__.py
deleted file mode 100644
index 2094e5d5..00000000
--- a/app_product_sequence/__openerp__.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-{
- 'name': 'App Product Internal Type,Auto Sequence, Auto Code(Variants Supported)',
- 'summary': 'Auto Internal Reference.',
- "version": '10.0.2.2',
- 'category': 'Sales',
- 'author': 'Sunpop.cn',
- 'website': 'http://www.sunpop.cn',
- 'license': 'AGPL-3',
- 'sequence': 2,
- 'installable': True,
- 'auto_install': False,
- 'application': True,
- 'images': ['static/description/set2.jpg'],
- 'currency': 'EUR',
- 'price': 98,
- 'description': u"""
- App Product Auto Sequence, Auto Code(Variants Supported)
-
- This module allows to associate a sequence to the product reference.
- The reference (default code) is unique (SQL constraint) and required.
- Support Product with or without Variants.
- 1.Auto Sequence or code for every product.自动产品编码。
- 2.Auto Sequence or for every product variants, like product20171130-001.自动多规格产品编码,形式为 主产品编码-001。
- 3.Product code must be Unique.产品编码强制要求唯一。
- 4.Define different product type, each product type use own rule of sequence.可自定义产品类型,不同产品类型使用不同编码规则。
- 5.Quick access in sale , inventory, system menu.可以在销售、库存、系统菜单中快速定义。
- 6.Multi language support. 多语种支持。
- 7.Setup default Auto Sequence for each product category
- """,
- 'pre_init_hook': 'pre_init_hook',
- 'depends': [
- 'product',
- 'stock',
- 'sale',
- 'purchase',
- 'mrp',
- ],
- 'data': [
- # 视图
- "security/ir.model.access.csv",
- # "security/security.xml",
- 'views/product_template_view.xml',
- 'views/product_product_view.xml',
- 'views/product_category_view.xml',
- 'views/product_internal_type_view.xml',
- 'data/product_sequence.xml',
- ],
- 'demo': [
- ],
-}
diff --git a/app_product_sequence/controllers/__init__.py b/app_product_sequence/controllers/__init__.py
deleted file mode 100644
index 8ee9bae1..00000000
--- a/app_product_sequence/controllers/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-import main
diff --git a/app_product_sequence/controllers/main.py b/app_product_sequence/controllers/main.py
deleted file mode 100644
index 40a96afc..00000000
--- a/app_product_sequence/controllers/main.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/app_product_sequence/controllers/product_sequence.xml b/app_product_sequence/controllers/product_sequence.xml
deleted file mode 100644
index 7955665e..00000000
--- a/app_product_sequence/controllers/product_sequence.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- D%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Components Product
- product.product
- C%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- S%(y)s%(month)s
- 5
-
- True
-
-
-
-
- Manufactured Product
- Set prefix as "D" in link sequence
-
-
-
- Sourced Product
- Set prefix as "S" in link sequence
-
-
-
- Components Product
- Set prefix as "C" in link sequence
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_sequence/data/product_sequence.xml b/app_product_sequence/data/product_sequence.xml
deleted file mode 100644
index 906a9335..00000000
--- a/app_product_sequence/data/product_sequence.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- PR%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- WL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
-
- Manufactured Product
- cp
- product
- 1
- 0
-
- Set prefix as "CP" in link sequence
-
-
-
-
- Manufactured Components
- bj
- product
- 0
- 0
-
- Set prefix as "BJ" in link sequence
-
-
-
-
- Components Product
- bc
- product
- 0
- 1
-
- Set prefix as "BC" in link sequence
-
-
-
-
- Sourced Product
- wl
- product
- 1
- 1
-
- Set prefix as "WL" in link sequence
-
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_sequence/data/product_sequence_dp.xml b/app_product_sequence/data/product_sequence_dp.xml
deleted file mode 100644
index af3e9cc1..00000000
--- a/app_product_sequence/data/product_sequence_dp.xml
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- D%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Components Product
- product.product
- C%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- S%(y)s%(month)s
- 5
-
- True
-
-
-
-
- Manufactured Product
- d
- product
- 1
- 0
-
- Set prefix as "D" in link sequence
-
-
-
- Sourced Product
- s
- product
- 1
- 1
-
- Set prefix as "S" in link sequence
-
-
-
- Components Product
- c
- product
- 0
- 1
-
- Set prefix as "C" in link sequence
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_sequence/data/product_sequence_felive.xml b/app_product_sequence/data/product_sequence_felive.xml
deleted file mode 100644
index 058eb1ce..00000000
--- a/app_product_sequence/data/product_sequence_felive.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- CL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
-
- 成品
- cp
- product
- 1
- 0
-
- 制造的成品。如:床,桌子
-
-
-
-
- 板件
- bj
- product
- 0
- 0
-
- 制造的半成品。如:床的左侧板,柜子的顶板
-
-
-
-
- 原材料(板材)
- bc
- product
- 0
- 1
-
- 制造所需的原材料,不可直接销售。如:中纤板(厚14mm)
-
-
-
-
- 外购成品
- cl
- product
- 1
- 1
-
- 采购后可直接销售,也可当原材料的成品。如:门把手
-
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_sequence/data/product_sequence_origin.xml b/app_product_sequence/data/product_sequence_origin.xml
deleted file mode 100644
index 5a990647..00000000
--- a/app_product_sequence/data/product_sequence_origin.xml
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- CL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
- Manufactured Product
- cp
- Set prefix as "CP" in link sequence
-
-
-
-
- Manufactured Components
- bj
- Set prefix as "BJ" in link sequence
-
-
-
-
- Sourced Material
- bc
- Set prefix as "BC" in link sequence
-
-
-
-
- Sourced Product
- cl
- Set prefix as "cl" in link sequence
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_sequence/hooks.py b/app_product_sequence/hooks.py
deleted file mode 100644
index 4a0ea85d..00000000
--- a/app_product_sequence/hooks.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-def pre_init_hook(cr):
- """
- Updates existing codes matching the default 'New' or
- empty. Primarily this ensures installation does not
- fail for demo data.
- :param cr: database cursor
- :return: void
- """
- cr.execute("UPDATE product_product "
- "SET default_code = '!!PR!!' || id "
- "WHERE default_code IS NULL OR default_code = 'New';")
-
- cr.execute("UPDATE product_template "
- "Set default_code = "
- "(select default_code from product_product "
- "where product_product.product_tmpl_id = product_template.id limit 1)"
- "WHERE default_code IS NULL OR default_code = 'New';")
diff --git a/app_product_sequence/i18n/zh_CN.po b/app_product_sequence/i18n/zh_CN.po
deleted file mode 100644
index 396e4a44..00000000
--- a/app_product_sequence/i18n/zh_CN.po
+++ /dev/null
@@ -1,221 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_product_sequence
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0-20171107\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-12-18 19:02+0000\n"
-"PO-Revision-Date: 2017-12-18 19:02+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_product_sequence
-#: model:ir.model.fields,help:app_product_sequence.field_product_internal_type_type
-msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
-"A consumable product, on the other hand, is a product for which stock is not managed.\n"
-"A service is a non-material product you provide.\n"
-"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
-msgstr "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
-"A consumable product, on the other hand, is a product for which stock is not managed.\n"
-"A service is a non-material product you provide.\n"
-"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_purchase_ok
-msgid "Can be Purchased"
-msgstr "可用于采购"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_rental
-msgid "Can be Rent"
-msgstr "可用于出租"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_sale_ok
-msgid "Can be Sold"
-msgstr "可用于销售"
-
-#. module: app_product_sequence
-#: code:addons/app_product_sequence/models/product_internal_type.py:34
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Consumable"
-msgstr "可消耗"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_create_uid
-msgid "Created by"
-msgstr "创建人"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_create_date
-msgid "Created on"
-msgstr "创建时间"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_category_internal_type
-msgid "Default Internal Type"
-msgstr "默认产品内部类型"
-
-#. module: app_product_sequence
-#: model:ir.ui.view,arch_db:app_product_sequence.product_internal_type_form_view
-msgid "Auto Set Product's Value To:"
-msgstr "自动设置产品默认参数为:"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,help:app_product_sequence.field_product_internal_type_route_ids
-msgid "Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."
-msgstr "取决于安装的模块,它允许在产品定义路线:购买,制造,MTO/MTS,等等..."
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_description
-msgid "Description"
-msgstr "说明"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_display_name
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_name
-#: model:ir.ui.view,arch_db:app_product_sequence.product_internal_type_form_view
-msgid "Display Name"
-msgstr "显示名称"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_id
-msgid "ID"
-msgstr "ID"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_product_default_code_index
-msgid "Internal Reference Index"
-msgstr "Varient序号"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_product_default_code_stored
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_template_default_code_stored
-msgid "Internal Reference Stored"
-msgstr "主产品编码"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_product_internal_type
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_template_internal_type
-msgid "Internal Type"
-msgstr "内部类型(编码)"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type___last_update
-msgid "Last Modified on"
-msgstr "最后修改日"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_write_uid
-msgid "Last Updated by"
-msgstr "最后更新人"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_write_date
-msgid "Last Updated on"
-msgstr "最后更新时间"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_link_sequence
-msgid "Link Sequence"
-msgstr "使用的序列"
-
-#. module: app_product_sequence
-#: code:addons/app_product_sequence/models/product_template.py:41
-#, python-format
-msgid "Please save product first before adding varients!"
-msgstr "增加产品变体前,请先保存当前产品!"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,help:app_product_sequence.field_product_internal_type_sequence_prefix
-msgid "Prefix value of the record for the sequence"
-msgstr "序列记录的前缀"
-
-#. module: app_product_sequence
-#: model:ir.model,name:app_product_sequence.model_product_product
-msgid "Product"
-msgstr "产品"
-
-#. module: app_product_sequence
-#: model:ir.model,name:app_product_sequence.model_product_category
-msgid "Product Category"
-msgstr "产品类别"
-
-#. module: app_product_sequence
-#: model:ir.actions.act_window,name:app_product_sequence.internal_type_action
-#: model:ir.ui.menu,name:app_product_sequence.menu_internal_type_action_sale
-#: model:ir.ui.menu,name:app_product_sequence.menu_internal_type_action_stock
-#: model:ir.ui.menu,name:app_product_sequence.menu_internal_type_action_sys
-#: model:ir.ui.view,arch_db:app_product_sequence.product_internal_type_form_view
-#: model:ir.ui.view,arch_db:app_product_sequence.product_internal_type_tree_view
-msgid "Product Internal Type"
-msgstr "内部类型(编码)"
-
-#. module: app_product_sequence
-#: model:ir.model,name:app_product_sequence.model_product_template
-msgid "Product Template"
-msgstr "产品模板"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_type
-msgid "Product Type"
-msgstr "产品类型"
-
-#. module: app_product_sequence
-#: code:addons/app_product_sequence/models/product_product.py:83
-#, python-format
-msgid "Product varient can only create in Product view!"
-msgstr "请在产品管理页面增加产品的多属性!"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_route_ids
-msgid "Routes"
-msgstr "路线"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_sequence_prefix
-msgid "Sequence Prefix"
-msgstr "编号前缀"
-
-#. module: app_product_sequence
-#: code:addons/app_product_sequence/models/product_internal_type.py:35
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Service"
-msgstr "服务"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,help:app_product_sequence.field_product_internal_type_sale_ok
-msgid "Specify if the product can be selected in a sales order line."
-msgstr "如果产品能在销售单明细在被选择,则指定。"
-
-#. module: app_product_sequence
-#: code:addons/app_product_sequence/models/product_internal_type.py:36
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Stockable Product"
-msgstr "可库存产品"
-
-#. module: app_product_sequence
-#: sql_constraint:product.internal.type:0
-#: sql_constraint:product.product:0
-msgid "The reference must be unique"
-msgstr "产品内部编码不可重复!"
-
-#. module: app_product_sequence
-#: model:ir.model.fields,field_description:app_product_sequence.field_product_internal_type_ref
-msgid "Unique Code"
-msgstr "唯一编码"
-
-#. module: app_product_sequence
-#: model:ir.model,name:app_product_sequence.model_product_internal_type
-msgid "product.internal.type"
-msgstr "product.internal.type"
-
diff --git a/app_product_sequence/models/__init__.py b/app_product_sequence/models/__init__.py
deleted file mode 100644
index e312570a..00000000
--- a/app_product_sequence/models/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-import product_template
-import product_product
-import product_category
-import product_internal_type
\ No newline at end of file
diff --git a/app_product_sequence/models/product_category.py b/app_product_sequence/models/product_category.py
deleted file mode 100644
index 841b8f20..00000000
--- a/app_product_sequence/models/product_category.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-28
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, exceptions, _
-
-
-class ProductCategory(models.Model):
- _name = "product.category"
- _inherit = ['product.category']
-
- internal_type = fields.Many2one(
- 'product.internal.type', 'Default Internal Type',
- auto_join=True, required=False)
diff --git a/app_product_sequence/models/product_internal_type.py b/app_product_sequence/models/product_internal_type.py
deleted file mode 100644
index 9eaf84de..00000000
--- a/app_product_sequence/models/product_internal_type.py
+++ /dev/null
@@ -1,62 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, _
-
-
-class ProductInternalType(models.Model):
- _name = "product.internal.type"
-
- name = fields.Char('Display Name', default='Normal', translate=True)
- description = fields.Char('Description')
- ref = fields.Char('Unique Code', required=True)
-
- link_sequence = fields.Many2one(
- 'ir.sequence', 'Link Sequence',
- auto_join=True, required=True, domain="[('code', '=', 'product.product')]")
- sequence_prefix = fields.Char(u'Sequence Prefix', related='link_sequence.prefix', readonly=True, store=False)
- # 各种默认值,填则自动录入,不填则不管
- type = fields.Selection([
- ('consu', _('Consumable')),
- ('service', _('Service')),
- ('product', _('Stockable Product'))], string='Product Type',
- help='A stockable product is a product for which you manage stock. The "Inventory" app has to be installed.\n'
- 'A consumable product, on the other hand, is a product for which stock is not managed.\n'
- 'A service is a non-material product you provide.\n'
- 'A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on '
- 'the e-commerce such as e-books, music, pictures,... The "Digital Product" module has to be installed.')
-
- rental = fields.Boolean('Can be Rent')
- sale_ok = fields.Boolean(
- 'Can be Sold', default=True,
- help="Specify if the product can be selected in a sales order line.")
- purchase_ok = fields.Boolean('Can be Purchased', default=True)
-
- # 使用目录的默认路线来处理,暂时不用内部类型路线
- route_ids = fields.Many2many('stock.location.route', string='Routes',
- domain=[('product_selectable', '=', True)],
- help="Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,...")
-
- # company_id = fields.Many2one(
- # 'res.company', 'Company',
- # default=lambda self: self.env.user.company_id.id, index=1)
-
- _sql_constraints = [
- ('uniq_ref',
- 'unique(ref)',
- 'The reference must be unique'),
- ]
\ No newline at end of file
diff --git a/app_product_sequence/models/product_product.py b/app_product_sequence/models/product_product.py
deleted file mode 100644
index 99b49892..00000000
--- a/app_product_sequence/models/product_product.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-from openerp import models, fields, api, exceptions, _
-
-
-class ProductProduct(models.Model):
- _inherit = 'product.product'
-
- default_code = fields.Char('Internal Reference', index=True, readonly=True, default=lambda self: _('New'), copy=False)
- default_code_index = fields.Integer('Internal Reference Index', readonly=True)
-
- _sql_constraints = [
- ('uniq_default_code',
- 'unique(default_code)',
- 'The reference must be unique'),
- ]
-
- @api.model
- def create(self, vals):
- # todo: but 先建空白产品后,编辑给2个以上变体,序号会少个 -1
- # code_index: 当没有变体现时,值为0,有变体时,为该变体序号
- if 'default_code' not in vals or vals['default_code'] == 'New':
- code_index = 0
- if 'product_tmpl_id' in vals:
- template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
- mylen = len(template.product_variant_ids)
- # created from product_template
- if 'product_tmpl_id' in vals:
- template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
- attr = vals['attribute_value_ids'][0][2]
- if not(attr):
- # 没有属性值,则是单规格产品。attribute_value_ids格式为[6,0,[]]。多规格时,attribute_value_ids格式为[6,0,[x]]
- code_index = 0
- vals['default_code_index'] = code_index
- vals['default_code'] = template.default_code_stored
- elif mylen == 0:
- # 有属性值了,自己是第一个规格
- code_index = 1
- vals['default_code_index'] = code_index
- vals['default_code'] = template.default_code_stored + '-%03d'%(code_index)
- elif mylen == 1:
- # 已存在1个,当存在的1个有属性时,要改已存在的product值
- code_index = template.product_variant_ids[:1].default_code_index
- if template.product_variant_ids[:1].attribute_value_ids:
- if code_index == 0:
- code_index = 1
- template.product_variant_ids[:1].default_code_index = code_index
- template.product_variant_ids[:1].default_code = template.default_code_stored + '-%03d'%(code_index)
- # 接着改当前操作的product值
- code_index = code_index + 1
- vals['default_code_index'] = code_index
- vals['default_code'] = template.default_code_stored + '-%03d'%(code_index)
- else:
- # 找到最大的序号
- variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index'])
- code_index = variant_max['default_code_index'] + 1
- vals['default_code_index'] = code_index
- vals['default_code'] = template.default_code_stored + '-%03d'%(code_index)
- else:
- # create from product_product
- sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
- if sequence:
- vals['default_code'] = sequence.link_sequence.next_by_id()
- return super(ProductProduct, self).create(vals)
-
- @api.multi
- def copy(self, default=None):
- if len(self.product_tmpl_id.product_variant_ids)>1 :
- raise exceptions.ValidationError(_('Product varient can only create in Product view!'))
- return super(ProductProduct, self).copy(default=None)
diff --git a/app_product_sequence/models/product_template.py b/app_product_sequence/models/product_template.py
deleted file mode 100644
index d0d01cca..00000000
--- a/app_product_sequence/models/product_template.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, exceptions, _
-
-
-class ProductTemplate(models.Model):
- _name = "product.template"
- _inherit = ['product.template']
-
- # auto_join只要搜索product.template,自动会join。如果经常用到 internal_type 效率会高。
- internal_type = fields.Many2one(
- 'product.internal.type', 'Internal Type',
- auto_join=True, required=True)
-
- default_code = fields.Char(
- 'Internal Reference', compute='_compute_default_code',
- inverse='_set_default_code', store=True, readonly=True,
- default='New', copy=False)
- # 因为default_code有odoo的处理方式,影响面大,故会将其另存到 default_code_stored
- default_code_stored = fields.Char('Internal Reference Stored',default='New')
-
- @api.model
- def create(self, vals):
- if 'attribute_line_ids' in vals:
- if len(vals['attribute_line_ids'])>0:
- raise exceptions.ValidationError(_('Please save product first before adding varients!'))
- if 'default_code' not in vals or vals['default_code'] == 'New':
- sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
- vals['default_code'] = sequence.link_sequence.next_by_id()
- vals['default_code_stored'] = vals['default_code']
- return super(ProductTemplate, self).create(vals)
-
- @api.depends('product_variant_ids', 'product_variant_ids.default_code')
- def _compute_default_code(self):
- unique_variants = self.filtered(lambda template: len(template.product_variant_ids) == 1)
- for template in unique_variants:
- template.default_code = template.product_variant_ids.default_code
- for template in (self):
- if len(template.product_variant_ids)>1:
- template.default_code = ''
-
- @api.one
- def _set_default_code(self):
- if len(self.product_variant_ids) == 1:
- self.product_variant_ids.default_code = self.default_code_stored
-
- # 当内部类型变化时,改变产品模板的各默认值
- @api.onchange('internal_type')
- def _onchange_internal_type(self):
- if self.internal_type:
- self.type = self.internal_type.type
- self.rental = self.internal_type.rental
- self.sale_ok = self.internal_type.sale_ok
- self.purchase_ok = self.internal_type.purchase_ok
- self.route_ids = self.internal_type.route_ids
-
- # 分类变动时,如果分类绑定了内部类型则联动
- @api.onchange('categ_id')
- def _onchange_cate_id(self):
- if self.categ_id and self.categ_id.internal_type:
- self.internal_type = self.categ_id.internal_type
\ No newline at end of file
diff --git a/app_product_sequence/security/ir.model.access.csv b/app_product_sequence/security/ir.model.access.csv
deleted file mode 100644
index 02697c29..00000000
--- a/app_product_sequence/security/ir.model.access.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_sale_order_type_manager,access_sale_order_type_manager,model_product_internal_type,sales_team.group_sale_manager,1,1,1,1
-access_sale_order_type_salesman,access_sale_order_type_salesman,model_product_internal_type,sales_team.group_sale_salesman,1,0,0,0
diff --git a/app_product_sequence/security/security.xml b/app_product_sequence/security/security.xml
deleted file mode 100644
index 6d51531b..00000000
--- a/app_product_sequence/security/security.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- Product Internal Type multi-company
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
-
-
-
diff --git a/app_product_sequence/static/description/icon.png b/app_product_sequence/static/description/icon.png
deleted file mode 100644
index 2a04f219..00000000
Binary files a/app_product_sequence/static/description/icon.png and /dev/null differ
diff --git a/app_product_sequence/static/description/index.html b/app_product_sequence/static/description/index.html
deleted file mode 100644
index 4ac12cc4..00000000
--- a/app_product_sequence/static/description/index.html
+++ /dev/null
@@ -1,162 +0,0 @@
-
-
-
App Product Auto Sequence, Auto Code(Variants Supported)
-
-
- This module allows to associate a sequence to the product reference.
- The reference (default code) is unique (SQL constraint) and required.
- Support Product with or without Variants.
-
-
-
- Auto Sequence or code for every product.
-
-
- Auto Sequence or for every product variants, like product20171130-001.
-
-
- Product code must be Unique.
-
-
- Define different product type, each product type use own rule of sequence.
-
-
- Quick access in sale , inventory, system menu.
-
-
- Multi language support.
-
-
-
-
-
-
-
-
-
Sample Rule: if we create on oct 2017
-
-
- Manufactured Products: M20171100001
-
-
- Components Products: C20171100001
-
-
- Sourced Products: S20171100001
-
-
-
- Sepcial for variants. add [-00?]
-
-
- Products with color[red]: M20171100001-001
-
-
- Products with color[blue]: M20171100001-002
-
-
- Products with color[white]: M20171100001-003
-
-
-
-
Installation:
-
- Prior to installing this module, if you have any existing products you should ensure they already have a
- unique reference (or no reference) set.
- Products with a default_code of '/' or empty will automatically be assigned a code of "!!DP!!" followed
- by the system id for that product.
- Otherwise the setting of the unique constraint will fail and the module will fail to install.
-
- Notice:
- Odoo product variants is very special.
- When u create a product(not product template) with attribute, It would delete the first product, which
- have no attribute.
- So it's very normal that the first product variants begin wit ???-002.
- And we make a rule that the product variants can only create after you create normal product template.
-
-
How to use: Very simple
-
- After installed the app. You can Go to anyone of the menu:
-
-
- Sales->Configuration->Products->Product Internal Type
-
-
- Inventory->Configuration->Products->Product Internal Type
-
-
- Settings->Sequences & Identifiers->Product Internal Type
-
-
-
-
- You would see the default Product Intertype we create.
-
-
-
-
-
-
- And create the product and code by yourself.
-
-
-
-
-
- Notice: The "Sequence Code" Field of sequence must be "product.product"
-
-
-
-
- Go to Prior to installing this module, if you have any existing products you should ensure they already have
- a
- unique reference (or no reference) set.
- Products with a default_code of '/' or empty will automatically be assigned a code of "!!DP!!" followed
- by the system id for that product.
- Otherwise the setting of the unique constraint will fail and the module will fail to install.
-
- Notice:
- Odoo product variants is very special.
- When u create a product(not product template) with attribute, It would delete the first product, which
- have no attribute.
- So it's very normal that the first product variants begin wit ???-002.
- And we make a rule that the product variants can only create after you create normal product template.
-
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
\ No newline at end of file
diff --git a/app_product_sequence/static/description/set1.jpg b/app_product_sequence/static/description/set1.jpg
deleted file mode 100644
index 77910e22..00000000
Binary files a/app_product_sequence/static/description/set1.jpg and /dev/null differ
diff --git a/app_product_sequence/static/description/set2.jpg b/app_product_sequence/static/description/set2.jpg
deleted file mode 100644
index f05874e3..00000000
Binary files a/app_product_sequence/static/description/set2.jpg and /dev/null differ
diff --git a/app_product_sequence/static/description/set3.jpg b/app_product_sequence/static/description/set3.jpg
deleted file mode 100644
index 78c9e415..00000000
Binary files a/app_product_sequence/static/description/set3.jpg and /dev/null differ
diff --git a/app_product_sequence/static/description/set4.jpg b/app_product_sequence/static/description/set4.jpg
deleted file mode 100644
index f2d148cf..00000000
Binary files a/app_product_sequence/static/description/set4.jpg and /dev/null differ
diff --git a/app_product_sequence/static/description/set5.jpg b/app_product_sequence/static/description/set5.jpg
deleted file mode 100644
index 2d422293..00000000
Binary files a/app_product_sequence/static/description/set5.jpg and /dev/null differ
diff --git a/app_product_sequence/tests/__init__.py b/app_product_sequence/tests/__init__.py
deleted file mode 100644
index 269a938e..00000000
--- a/app_product_sequence/tests/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-from . import test_product_sequence
diff --git a/app_product_sequence/tests/test_product_sequence.py b/app_product_sequence/tests/test_product_sequence.py
deleted file mode 100644
index f275be4f..00000000
--- a/app_product_sequence/tests/test_product_sequence.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-from odoo.tests.common import TransactionCase
-from ..hooks import pre_init_hook
-
-
-class TestProductSequence(TransactionCase):
- """Tests for creating product with and without Product Sequence"""
-
- def setUp(self):
- super(TestProductSequence, self).setUp()
- self.product_product = self.env['product.product']
-
- def test_product_create_with_default_code(self):
- product = self.product_product.create(dict(
- name="Apple",
- default_code='PROD01'
- ))
- self.assertEqual(product.default_code, 'PROD01')
-
- def test_product_create_without_default_code(self):
- product_1 = self.product_product.create(dict(
- name="Orange",
- default_code='/'))
- self.assertRegexpMatches(str(product_1.default_code), r'PR/*')
-
- def test_product_copy(self):
- product_2 = self.product_product.create(dict(
- name="Apple",
- default_code='PROD02'
- ))
- copy_product_2 = product_2.copy()
- self.assertEqual(copy_product_2.default_code, 'PROD02-copy')
-
- def test_pre_init_hook(self):
- product_3 = self.product_product.create(dict(
- name="Apple",
- default_code='PROD03'
- ))
- self.cr.execute(
- "update product_product set default_code='/' where id=%s"
- % (product_3.id,))
- product_3.invalidate_cache()
- self.assertEqual(product_3.default_code, '/')
- pre_init_hook(self.cr)
- product_3.invalidate_cache()
- self.assertEqual(product_3.default_code, '!!mig!!%s' % (product_3.id,))
diff --git a/app_product_sequence/views/product_category_view.xml b/app_product_sequence/views/product_category_view.xml
deleted file mode 100644
index 7e1b5c79..00000000
--- a/app_product_sequence/views/product_category_view.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- product.category.list.internal_type
- product.category
-
-
-
-
-
-
-
-
-
- product.category.form._internal_type
- product.category
-
-
-
-
-
-
-
-
-
diff --git a/app_product_sequence/views/product_internal_type_view.xml b/app_product_sequence/views/product_internal_type_view.xml
deleted file mode 100644
index 02d54ec3..00000000
--- a/app_product_sequence/views/product_internal_type_view.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-
-
-
- product.internal.type.tree
- product.internal.type
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- product.internal.type.form
- product.internal.type
-
-
-
-
-
-
- Product Internal Type
- ir.actions.act_window
- product.internal.type
- tree,form
-
-
-
-
-
-
-
-
-
diff --git a/app_product_sequence/views/product_product_view.xml b/app_product_sequence/views/product_product_view.xml
deleted file mode 100644
index 834bb3ef..00000000
--- a/app_product_sequence/views/product_product_view.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- product.product.tree
- product.product
-
-
-
-
-
-
-
-
-
diff --git a/app_product_sequence/views/product_template_view.xml b/app_product_sequence/views/product_template_view.xml
deleted file mode 100644
index a790db68..00000000
--- a/app_product_sequence/views/product_template_view.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
- product.template.product.tree
- product.template
-
-
-
-
-
-
-
-
-
- product.template.common.form
- product.template
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app_product_sequence/产品自动唯一编码模块支持多规格.txt b/app_product_sequence/产品自动唯一编码模块支持多规格.txt
deleted file mode 100644
index a62820ce..00000000
--- a/app_product_sequence/产品自动唯一编码模块支持多规格.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-App Product Auto Sequence, Auto Code(Variants Supported)
-
-1.ԶƷ롣
-2.ԶƷ룬ʽΪ Ʒ-001
-3.ƷǿҪΨһ
-4.ԶƷͣͬƷʹòͬ
-5.ۡ桢ϵͳ˵пٶ塣
-6.֧֡
-
-This module allows to associate a sequence to the product reference.
-The reference (default code) is unique (SQL constraint) and required.
-Support Product with or without Variants.
-1.Auto Sequence or code for every product.ԶƷ롣
-2.Auto Sequence or for every product variants, like product20171130-001.ԶƷ룬ʽΪ Ʒ-001
-3.Product code must be Unique.ƷǿҪΨһ
-4.Define different product type, each product type use own rule of sequence.ԶƷͣͬƷʹòͬ
-5.Quick access in sale , inventory, system menu.ۡ桢ϵͳ˵пٶ塣
-6.Multi language support. ֧֡
-
-
-ҳ棬
-http://www.sunpop.cn/product/app-product-auto-sequence-auto-codevariants-supported/
diff --git a/app_product_type_sequence/__init__.py b/app_product_type_sequence/__init__.py
deleted file mode 100644
index 32e57aa9..00000000
--- a/app_product_type_sequence/__init__.py
+++ /dev/null
@@ -1,18 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-import models
-import controllers
-from .hooks import pre_init_hook
-
diff --git a/app_product_type_sequence/__openerp__.py b/app_product_type_sequence/__openerp__.py
deleted file mode 100644
index 738e996f..00000000
--- a/app_product_type_sequence/__openerp__.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-{
- 'name': 'App Product Internal Type,Auto Sequence, Auto Code(Variants Supported), Auto Attributes',
- 'summary': 'Auto Internal Reference.',
- "version": '10.0.2.2',
- 'category': 'Sales',
- 'author': 'Sunpop.cn',
- 'website': 'http://www.sunpop.cn',
- 'license': 'AGPL-3',
- 'sequence': 2,
- 'installable': True,
- 'auto_install': True,
- 'application': True,
- 'images': ['static/description/set2.jpg'],
- 'currency': 'EUR',
- 'price': 98,
- 'description': u"""
- App Product Auto Sequence, Auto Code(Variants Supported), Auto Attributes
-
- This module allows to associate a sequence to the product reference.
- The reference (default code) is unique (SQL constraint) and required.
- Support Product with or without Variants.
- 1.Auto Sequence or code for every product.自动产品编码。
- 2.Auto Sequence or for every product variants, like product20171130-001.自动多规格产品编码,形式为 主产品编码-001。
- 3.Product code must be Unique.产品编码强制要求唯一。
- 4.Define different product type, each product type use own rule of sequence.可自定义产品类型,不同产品类型使用不同编码规则。
- 5.Quick access in sale , inventory, system menu.可以在销售、库存、系统菜单中快速定义。
- 6.Multi language support. 多语种支持。
- 7.Setup default Auto Sequence for each product category,自动设置每个产品目录使用的产品编码规则
- 8.Auto setup product attribute lik Sale/Purchase, Stockable/Consumable/Service, Stock Routes. 自动设置产品的销售/采购,可库存产品/服务/消耗品,购买/制造/按订单生成等库存路线
- """,
- 'pre_init_hook': 'pre_init_hook',
- 'depends': [
- 'product',
- 'stock',
- 'sale',
- 'purchase',
- 'mrp',
- ],
- 'data': [
- # 视图
- "security/ir.model.access.csv",
- "security/security.xml",
- 'views/product_template_view.xml',
- 'views/product_product_view.xml',
- 'views/product_category_view.xml',
- 'views/product_internal_type_view.xml',
- 'data/product_sequence.xml',
- ],
- 'demo': [
- ],
-}
diff --git a/app_product_type_sequence/controllers/__init__.py b/app_product_type_sequence/controllers/__init__.py
deleted file mode 100644
index 8ee9bae1..00000000
--- a/app_product_type_sequence/controllers/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-import main
diff --git a/app_product_type_sequence/controllers/main.py b/app_product_type_sequence/controllers/main.py
deleted file mode 100644
index 40a96afc..00000000
--- a/app_product_type_sequence/controllers/main.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/app_product_type_sequence/data/product_sequence.xml b/app_product_type_sequence/data/product_sequence.xml
deleted file mode 100644
index e30981cf..00000000
--- a/app_product_type_sequence/data/product_sequence.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- PR%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- WL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
-
- Manufactured Product
- cp
- 1
- product
- 1
- 0
-
- Set prefix as "CP" in link sequence
-
-
-
-
- Manufactured Components
- bj
- 2
- product
- 0
- 0
-
- Set prefix as "BJ" in link sequence
-
-
-
-
- Components Product
- bc
- 3
- product
- 0
- 1
-
- Set prefix as "BC" in link sequence
-
-
-
-
- Sourced Product
- wl
- 4
- product
- 1
- 1
-
- Set prefix as "WL" in link sequence
-
-
-
-
- Service
- fw
- 5
- service
- 1
- 1
- Set prefix as "PR" in link sequence
-
-
-
-
- Consumer
- xh
- 6
- consu
- 1
- 1
- Set prefix as "PR" in link sequence
-
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_type_sequence/data/product_sequence_dp.xml b/app_product_type_sequence/data/product_sequence_dp.xml
deleted file mode 100644
index 4b8b3ff3..00000000
--- a/app_product_type_sequence/data/product_sequence_dp.xml
+++ /dev/null
@@ -1,104 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- D%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Components Product
- product.product
- C%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- S%(y)s%(month)s
- 5
-
- True
-
-
-
- Service
- product.product
- V%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
- Manufactured Product
- d
- product
- 1
- 0
-
- Set prefix as "D" in link sequence
-
-
-
- Components Product
- c
- product
- 0
- 1
-
- Set prefix as "C" in link sequence
-
-
-
- Sourced Product
- s
- product
- 1
- 1
-
- Set prefix as "S" in link sequence
-
-
-
- Service
- v
- service
- 1
- 1
-
- Set prefix as "V" in link sequence
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_type_sequence/data/product_sequence_felive.xml b/app_product_type_sequence/data/product_sequence_felive.xml
deleted file mode 100644
index 5278299c..00000000
--- a/app_product_type_sequence/data/product_sequence_felive.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- PR%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- WL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
- 图纸成品
- cp
- 1
- product
- 1
- 0
-
- Set prefix as "CP" in link sequence
-
-
-
-
- 图纸板件
- bj
- 2
- product
- 0
- 0
-
- Set prefix as "BJ" in link sequence
-
-
-
-
- 大板
- bc
- 3
- product
- 0
- 1
-
- Set prefix as "BC" in link sequence
-
-
-
-
- 基础物料
- cl
- 4
- product
- 1
- 1
-
- Set prefix as "CL" in link sequence
-
-
-
-
- 服务与费用
- fw
- 5
- service
- 1
- 1
- Set prefix as "PR" in link sequence
-
-
-
-
- 消耗品
- xh
- 6
- consu
- 0
- 0
- Set prefix as "PR" in link sequence
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app_product_type_sequence/data/product_sequence_origin.xml b/app_product_type_sequence/data/product_sequence_origin.xml
deleted file mode 100644
index c0c7f9f6..00000000
--- a/app_product_type_sequence/data/product_sequence_origin.xml
+++ /dev/null
@@ -1,109 +0,0 @@
-
-
-
-
-
-
- Sequence for All Products
- product.product
- P%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Product
- product.product
- CP%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Manufactured Components
- product.product
- BJ%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Material
- product.product
- BC%(y)s%(month)s
- 5
-
- True
-
-
-
- Sequence for Sourced Product
- product.product
- CL%(y)s%(month)s
- 5
-
- True
-
-
-
-
-
-
- Manufactured Product
- cp
- product
- 1
- 0
-
- Set prefix as "CP" in link sequence
-
-
-
-
- Manufactured Components
- bj
- product
- 0
- 0
-
- Set prefix as "BJ" in link sequence
-
-
-
-
- Components Product
- bc
- product
- 0
- 1
-
- Set prefix as "BC" in link sequence
-
-
-
-
- Sourced Product
- cl
- product
- 1
- 1
-
- Set prefix as "CL" in link sequence
-
-
-
-
-
-
- internal_type
- product.template
- default
-
-
-
-
-
-
diff --git a/app_product_type_sequence/hooks.py b/app_product_type_sequence/hooks.py
deleted file mode 100644
index 4a0ea85d..00000000
--- a/app_product_type_sequence/hooks.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-def pre_init_hook(cr):
- """
- Updates existing codes matching the default 'New' or
- empty. Primarily this ensures installation does not
- fail for demo data.
- :param cr: database cursor
- :return: void
- """
- cr.execute("UPDATE product_product "
- "SET default_code = '!!PR!!' || id "
- "WHERE default_code IS NULL OR default_code = 'New';")
-
- cr.execute("UPDATE product_template "
- "Set default_code = "
- "(select default_code from product_product "
- "where product_product.product_tmpl_id = product_template.id limit 1)"
- "WHERE default_code IS NULL OR default_code = 'New';")
diff --git a/app_product_type_sequence/i18n/zh_CN.po b/app_product_type_sequence/i18n/zh_CN.po
deleted file mode 100644
index 6e5c7abf..00000000
--- a/app_product_type_sequence/i18n/zh_CN.po
+++ /dev/null
@@ -1,249 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_product_type_sequence
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0+e-20171107\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-12-19 13:34+0000\n"
-"PO-Revision-Date: 2017-12-19 13:34+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_product_type_sequence
-#: model:ir.model.fields,help:app_product_type_sequence.field_product_internal_type_type
-msgid "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
-"A consumable product, on the other hand, is a product for which stock is not managed.\n"
-"A service is a non-material product you provide.\n"
-"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
-msgstr "A stockable product is a product for which you manage stock. The \"Inventory\" app has to be installed.\n"
-"A consumable product, on the other hand, is a product for which stock is not managed.\n"
-"A service is a non-material product you provide.\n"
-"A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on the e-commerce such as e-books, music, pictures,... The \"Digital Product\" module has to be installed."
-
-#. module: app_product_type_sequence
-#: model:ir.ui.view,arch_db:app_product_type_sequence.product_internal_type_form_view
-msgid "Auto Set Product's Value To:"
-msgstr "自动设置产品默认参数为:"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_purchase_ok
-msgid "Can be Purchased"
-msgstr "可用于采购"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_rental
-msgid "Can be Rent"
-msgstr "可用于出租"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_sale_ok
-msgid "Can be Sold"
-msgstr "可用于销售"
-
-#. module: app_product_type_sequence
-#: model:product.internal.type,name:app_product_type_sequence.internal_type_sourced_material
-msgid "Components Product"
-msgstr "原材料"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_internal_type.py:34
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Consumable"
-msgstr "可消耗"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_create_uid
-msgid "Created by"
-msgstr "创建人"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_create_date
-msgid "Created on"
-msgstr "创建时间"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_category_internal_type
-msgid "Default Internal Type"
-msgstr "默认产品内部类型"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,help:app_product_type_sequence.field_product_internal_type_route_ids
-msgid "Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,..."
-msgstr "取决于安装的模块,它允许在产品定义路线:购买,制造,MTO/MTS,等等..."
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_description
-msgid "Description"
-msgstr "说明"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_display_name
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_name
-#: model:ir.ui.view,arch_db:app_product_type_sequence.product_internal_type_form_view
-msgid "Display Name"
-msgstr "显示名称"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_id
-msgid "ID"
-msgstr "ID"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_product_default_code_index
-msgid "Internal Reference Index"
-msgstr "Varient序号"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_product_default_code_stored
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_template_default_code_stored
-msgid "Internal Reference Stored"
-msgstr "主产品编码"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_product_internal_type
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_template_internal_type
-msgid "Internal Type"
-msgstr "内部类型"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type___last_update
-msgid "Last Modified on"
-msgstr "最后修改日"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_write_uid
-msgid "Last Updated by"
-msgstr "最后更新人"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_write_date
-msgid "Last Updated on"
-msgstr "最后更新时间"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_link_sequence
-msgid "Link Sequence"
-msgstr "使用的序列"
-
-#. module: app_product_type_sequence
-#: model:product.internal.type,name:app_product_type_sequence.internal_type_mrp_product
-msgid "Manufactured Product"
-msgstr "制造成品"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_product.py:23
-#: code:addons/app_product_type_sequence/models/product_template.py:33
-#, python-format
-msgid "New"
-msgstr "新建"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_template.py:41
-#, python-format
-msgid "Please save product first before adding varients!"
-msgstr "增加产品变体前,请先保存当前产品!"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,help:app_product_type_sequence.field_product_internal_type_sequence_prefix
-msgid "Prefix value of the record for the sequence"
-msgstr "序列记录的前缀"
-
-#. module: app_product_type_sequence
-#: model:ir.model,name:app_product_type_sequence.model_product_product
-msgid "Product"
-msgstr "产品"
-
-#. module: app_product_type_sequence
-#: model:ir.model,name:app_product_type_sequence.model_product_category
-msgid "Product Category"
-msgstr "产品类别"
-
-#. module: app_product_type_sequence
-#: model:ir.actions.act_window,name:app_product_type_sequence.internal_type_action
-#: model:ir.ui.menu,name:app_product_type_sequence.menu_internal_type_action_purchase
-#: model:ir.ui.menu,name:app_product_type_sequence.menu_internal_type_action_sale
-#: model:ir.ui.menu,name:app_product_type_sequence.menu_internal_type_action_stock
-#: model:ir.ui.menu,name:app_product_type_sequence.menu_internal_type_action_sys
-#: model:ir.ui.view,arch_db:app_product_type_sequence.product_internal_type_form_view
-#: model:ir.ui.view,arch_db:app_product_type_sequence.product_internal_type_tree_view
-msgid "Product Internal Type"
-msgstr "产品编码类型"
-
-#. module: app_product_type_sequence
-#: model:ir.model,name:app_product_type_sequence.model_product_template
-msgid "Product Template"
-msgstr "产品模板"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_type
-msgid "Product Type"
-msgstr "产品类型"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_product.py:83
-#, python-format
-msgid "Product varient can only create in Product view!"
-msgstr "请在产品管理页面增加产品的多属性!"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_route_ids
-msgid "Routes"
-msgstr "路线"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_sequence_prefix
-msgid "Sequence Prefix"
-msgstr "编号前缀"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_sequence
-msgid "Sequence"
-msgstr "显示顺序"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_internal_type.py:35
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Service"
-msgstr "服务"
-
-#. module: app_product_type_sequence
-#: model:product.internal.type,name:app_product_type_sequence.internal_type_sourced_product
-msgid "Sourced Product"
-msgstr "外购成品"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,help:app_product_type_sequence.field_product_internal_type_sale_ok
-msgid "Specify if the product can be selected in a sales order line."
-msgstr "如果产品能在销售单明细在被选择,则指定。"
-
-#. module: app_product_type_sequence
-#: code:addons/app_product_type_sequence/models/product_internal_type.py:36
-#: selection:product.internal.type,type:0
-#, python-format
-msgid "Stockable Product"
-msgstr "可库存产品"
-
-#. module: app_product_type_sequence
-#: sql_constraint:product.internal.type:0
-#: sql_constraint:product.product:0
-msgid "The reference must be unique"
-msgstr "产品内部编码不可重复!"
-
-#. module: app_product_type_sequence
-#: model:ir.model.fields,field_description:app_product_type_sequence.field_product_internal_type_ref
-msgid "Unique Code"
-msgstr "唯一编码"
-
-#. module: app_product_type_sequence
-#: model:ir.model,name:app_product_type_sequence.model_product_internal_type
-msgid "product.internal.type"
-msgstr "product.internal.type"
-
diff --git a/app_product_type_sequence/models/__init__.py b/app_product_type_sequence/models/__init__.py
deleted file mode 100644
index e312570a..00000000
--- a/app_product_type_sequence/models/__init__.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# -*- coding: utf-8 -*-
-import product_template
-import product_product
-import product_category
-import product_internal_type
\ No newline at end of file
diff --git a/app_product_type_sequence/models/product_category.py b/app_product_type_sequence/models/product_category.py
deleted file mode 100644
index 841b8f20..00000000
--- a/app_product_type_sequence/models/product_category.py
+++ /dev/null
@@ -1,27 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-28
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, exceptions, _
-
-
-class ProductCategory(models.Model):
- _name = "product.category"
- _inherit = ['product.category']
-
- internal_type = fields.Many2one(
- 'product.internal.type', 'Default Internal Type',
- auto_join=True, required=False)
diff --git a/app_product_type_sequence/models/product_internal_type.py b/app_product_type_sequence/models/product_internal_type.py
deleted file mode 100644
index 5b8690f8..00000000
--- a/app_product_type_sequence/models/product_internal_type.py
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, _
-
-
-class ProductInternalType(models.Model):
- _name = "product.internal.type"
- _order = 'sequence, name'
-
- sequence = fields.Integer('Sequence', default=9)
- name = fields.Char('Display Name', default='Normal', translate=True)
- description = fields.Char('Description')
- ref = fields.Char('Unique Code', required=True)
-
- link_sequence = fields.Many2one(
- 'ir.sequence', 'Link Sequence',
- auto_join=True, required=True, domain="[('code', '=', 'product.product')]")
- sequence_prefix = fields.Char(u'Sequence Prefix', related='link_sequence.prefix', readonly=True, store=False)
- # 各种默认值,填则自动录入,不填则不管
- type = fields.Selection([
- ('consu', _('Consumable')),
- ('service', _('Service')),
- ('product', _('Stockable Product'))], string='Product Type',
- help='A stockable product is a product for which you manage stock. The "Inventory" app has to be installed.\n'
- 'A consumable product, on the other hand, is a product for which stock is not managed.\n'
- 'A service is a non-material product you provide.\n'
- 'A digital content is a non-material product you sell online. The files attached to the products are the one that are sold on '
- 'the e-commerce such as e-books, music, pictures,... The "Digital Product" module has to be installed.')
-
- rental = fields.Boolean('Can be Rent')
- sale_ok = fields.Boolean(
- 'Can be Sold', default=True,
- help="Specify if the product can be selected in a sales order line.")
- purchase_ok = fields.Boolean('Can be Purchased', default=True)
-
- # 使用目录的默认路线来处理,暂时不用内部类型路线
- route_ids = fields.Many2many('stock.location.route', string='Routes',
- domain=[('product_selectable', '=', True)],
- help="Depending on the modules installed, this will allow you to define the route of the product: whether it will be bought, manufactured, MTO/MTS,...")
-
- company_id = fields.Many2one(
- 'res.company', 'Company',
- default=lambda self: self.env.user.company_id.id, index=1)
-
- _sql_constraints = [
- ('uniq_ref',
- 'unique(ref)',
- 'The reference must be unique'),
- ]
\ No newline at end of file
diff --git a/app_product_type_sequence/models/product_product.py b/app_product_type_sequence/models/product_product.py
deleted file mode 100644
index 28ded679..00000000
--- a/app_product_type_sequence/models/product_product.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-01-09
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-from openerp import models, fields, api, exceptions, _
-
-
-class ProductProduct(models.Model):
- _inherit = 'product.product'
-
- default_code = fields.Char('Internal Reference', index=True, default=lambda self: _('New'), copy=False)
- default_code_index = fields.Integer('Internal Reference Index', readonly=True)
-
- # todo: 检查数据,要保证数据唯一性
- _sql_constraints = [
- ('uniq_default_code',
- 'unique(default_code)',
- 'The reference must be unique'),
- ]
-
- @api.model
- def default_get(self, fields):
- context = self._context or {}
- res = super(ProductProduct, self).default_get(fields)
- # 内部编码类型默认值的录入
- if context.get("default_internal_type"):
- self._onchange_internal_type()
- elif context.get("default_internal_type_ref"):
- types = self.env['product.internal.type'].search_read([('ref', '=', context.get("default_internal_type_ref"))], limit=1)
- if types:
- res.update({'internal_type':types[0]['id']})
- self._onchange_internal_type()
- return res
-
- @api.model
- def create(self, vals):
- # todo: but 先建空白产品后,编辑2个以上变体,序号会少个 -1
- # code_index: 当没有变体现时,值为0,有变体时,为该变体序号
- code_index = 0
- if 'default_code' not in vals or vals['default_code'] == _('New'):
- if 'product_tmpl_id' in vals:
- # 按产品模板创建产品,有多种情况
- template = self.env['product.template'].search([('id', '=', vals['product_tmpl_id'])], limit=1)
- if template.default_code and template.default_code != '':
- code_stored = template.default_code
- else:
- code_stored = template.default_code_stored
- if not code_stored:
- code_stored = ''
- mylen = len(template.product_variant_ids)
- try:
- attr = vals['attribute_value_ids'][0][2]
- except:
- attr = 0
-
- # if self.env.context.get('create_from_tmpl') and not(attr): 此条件已限制,不让在template中先直接创建变体,要求先保存
- if self.env.context.get('create_from_tmpl') and not(attr):
- # 从产品模板创建的第一个sku产品,不带属性
- # 没有属性值,则是单规格产品。attribute_value_ids格式为[6,0,[]]。多规格时,attribute_value_ids格式为[6,0,[x]]
- code_index = 0
- vals['default_code_index'] = code_index
- vals['default_code'] = code_stored
- elif mylen == 0:
- # 有属性值了,自己是第一个规格
- code_index = 1
- vals['default_code_index'] = code_index
- vals['default_code'] = code_stored + '#%03d'%(code_index)
- elif mylen == 1:
- # 已存在1个,当存在的1个有属性时,要改已存在的product值
- code_index = template.product_variant_ids[:1].default_code_index
- if template.product_variant_ids[:1].attribute_value_ids:
- if code_index == 0:
- code_index = 1
- template.product_variant_ids[:1].default_code_index = code_index
- template.product_variant_ids[:1].default_code = code_stored + '#%03d'%(code_index)
- # 接着改当前操作的product值
- code_index = code_index + 1
- vals['default_code_index'] = code_index
- vals['default_code'] = code_stored + '#%03d'%(code_index)
- elif mylen > 1:
- # 找到最大的序号
- variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index'])
- code_index = variant_max['default_code_index'] + 1
- vals['default_code_index'] = code_index
- vals['default_code'] = code_stored + '#%03d'%(code_index)
- else:
- # 当按模板
- # 此条件常规不出现,但特殊项目会有
- variant_max = max(template.product_variant_ids,key=lambda x: x['default_code_index'])
- code_index = variant_max['default_code_index'] + 1
- vals['default_code_index'] = code_index
- vals['default_code'] = code_stored + '#%03d'%(code_index)
- else:
- # create from product_product
- # 默认使用制造成品的编码
- sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False)
- if 'internal_type' in vals:
- sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
- vals['default_code'] = sequence.link_sequence.next_by_id()
- else:
- # 如果有自己输入 ref,则不需要自运输生成
- # sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
- # if sequence:
- # vals['default_code'] = sequence.link_sequence.next_by_id()
- pass
- return super(ProductProduct, self).create(vals)
-
- @api.multi
- def copy(self, default=None):
- if len(self.product_tmpl_id.product_variant_ids)>1 :
- raise exceptions.ValidationError(_('Product varient can only create in Product view!'))
- return super(ProductProduct, self).copy(default=None)
-
- # 当内部类型变化时,改变产品的各默认值
- @api.onchange('internal_type')
- def _onchange_internal_type(self):
- if self.internal_type:
- self.type = self.internal_type.type
- self.rental = self.internal_type.rental
- self.sale_ok = self.internal_type.sale_ok
- self.purchase_ok = self.internal_type.purchase_ok
- self.route_ids = self.internal_type.route_ids
-
- # 分类变动时,如果分类绑定了内部类型则联动
- @api.onchange('categ_id')
- def _onchange_cate_id(self):
- if self.categ_id and self.categ_id.internal_type:
- self.internal_type = self.categ_id.internal_type
\ No newline at end of file
diff --git a/app_product_type_sequence/models/product_template.py b/app_product_type_sequence/models/product_template.py
deleted file mode 100644
index bd51b4a0..00000000
--- a/app_product_type_sequence/models/product_template.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-from openerp import api, fields, models, exceptions, _
-
-
-class ProductTemplate(models.Model):
- _name = "product.template"
- _inherit = ['product.template']
-
- # auto_join只要搜索product.template,自动会join。如果经常用到 internal_type 效率会高。
- internal_type = fields.Many2one(
- 'product.internal.type', 'Internal Type',
- auto_join=True, required=True)
-
- default_code = fields.Char(
- 'Internal Reference',
- compute='_compute_default_code',
- inverse='_set_default_code',
- store=True, default=lambda self: _('New'), copy=False)
- # 因为default_code有odoo的处理方式,影响面大,故会将其另存到 default_code_stored
- default_code_stored = fields.Char('Internal Reference Stored',
- default=lambda self: _('New'))
-
- @api.model
- def default_get(self, fields):
- context = self._context or {}
- res = super(ProductTemplate, self).default_get(fields)
- # 内部编码类型默认值的录入
- if context.get("default_internal_type"):
- self._onchange_internal_type()
- elif context.get("default_internal_type_ref"):
- types = self.env['product.internal.type'].search_read([('ref', '=', context.get("default_internal_type_ref"))], limit=1)
- if types:
- res.update({'internal_type':types[0]['id']})
- self._onchange_internal_type()
- return res
-
- @api.model
- def create(self, vals):
- if 'attribute_line_ids' in vals:
- if len(vals['attribute_line_ids'])>0:
- raise exceptions.ValidationError(_('Please save product first before adding varients!'))
-
- if 'default_code' not in vals or vals['default_code'] == _('New'):
- sequence = self.env['product.internal.type'].search([('id', '=', vals['internal_type'])], limit=1)
- if not sequence:
- sequence = self.env.ref('app_product_type_sequence.internal_type_mrp_product', raise_if_not_found=False)
- vals['default_code'] = sequence.link_sequence.next_by_id()
- else:
- pass
-
- if vals['default_code']:
- vals['default_code_stored'] = vals['default_code']
-
- return super(ProductTemplate, self).create(vals)
-
- @api.depends('product_variant_ids', 'product_variant_ids.default_code')
- def _compute_default_code(self):
- unique_variants = self.filtered(lambda template: len(template.product_variant_ids) == 1)
- # 设置default_code
- for template in unique_variants:
- template.default_code = template.product_variant_ids.default_code
- for template in (self - unique_variants):
- if len(template.product_variant_ids)>1:
- template.default_code = ''
-
- @api.one
- def _set_default_code(self):
- if len(self.product_variant_ids) == 1:
- self.product_variant_ids.default_code = self.default_code_stored
-
- # 当内部类型变化时,改变产品模板的各默认值
- @api.onchange('internal_type')
- def _onchange_internal_type(self):
- if self.internal_type:
- self.type = self.internal_type.type
- self.rental = self.internal_type.rental
- self.sale_ok = self.internal_type.sale_ok
- self.purchase_ok = self.internal_type.purchase_ok
- self.route_ids = self.internal_type.route_ids
-
- # 分类变动时,如果分类绑定了内部类型则联动
- @api.onchange('categ_id')
- def _onchange_cate_id(self):
- if self.categ_id and self.categ_id.internal_type:
- self.internal_type = self.categ_id.internal_type
\ No newline at end of file
diff --git a/app_product_type_sequence/security/ir.model.access.csv b/app_product_type_sequence/security/ir.model.access.csv
deleted file mode 100644
index 02697c29..00000000
--- a/app_product_type_sequence/security/ir.model.access.csv
+++ /dev/null
@@ -1,3 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-access_sale_order_type_manager,access_sale_order_type_manager,model_product_internal_type,sales_team.group_sale_manager,1,1,1,1
-access_sale_order_type_salesman,access_sale_order_type_salesman,model_product_internal_type,sales_team.group_sale_salesman,1,0,0,0
diff --git a/app_product_type_sequence/security/security.xml b/app_product_type_sequence/security/security.xml
deleted file mode 100644
index c3ab0e2f..00000000
--- a/app_product_type_sequence/security/security.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
- Product Internal Type multi-company
-
- ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
-
-
-
-
-
-
diff --git a/app_product_type_sequence/static/description/icon.png b/app_product_type_sequence/static/description/icon.png
deleted file mode 100644
index 2a04f219..00000000
Binary files a/app_product_type_sequence/static/description/icon.png and /dev/null differ
diff --git a/app_product_type_sequence/static/description/index.html b/app_product_type_sequence/static/description/index.html
deleted file mode 100644
index ecb4de17..00000000
--- a/app_product_type_sequence/static/description/index.html
+++ /dev/null
@@ -1,171 +0,0 @@
-
-
-
App Product Auto Sequence, Auto Code(Variants Supported), Auto Attributes
-
-
- This module allows to associate a sequence to the product reference.
- The reference (default code) is unique (SQL constraint) and required.
- Support Product with or without Variants.
-
-
-
- Auto Sequence or code for every product.
-
-
- Auto Sequence or for every product variants, like product20171130-001.
-
-
- Product code must be Unique.
-
-
- Define different product type, each product type use own rule of sequence.
-
-
- Quick access in sale , inventory, system menu.
-
-
- Multi language support.
-
-
- Setup default Auto Sequence for each product category.
-
-
- Auto setup product attribute lik Sale/Purchase, Stockable/Consumable/Service, Stock Routes.
-
-
-
-
-
-
-
-
-
-
-
-
Sample Rule: if we create on oct 2017
-
-
- Manufactured Products: M20171100001
-
-
- Components Products: C20171100001
-
-
- Sourced Products: S20171100001
-
-
-
- Sepcial for variants. add [-00?]
-
-
- Products with color[red]: M20171100001#001
-
-
- Products with color[blue]: M20171100001#002
-
-
- Products with color[white]: M20171100001#003
-
-
-
-
Installation:
-
- Prior to installing this module, if you have any existing products you should ensure they already have a
- unique reference (or no reference) set.
- Products with a default_code of '/' or empty will automatically be assigned a code of "!!DP!!" followed
- by the system id for that product.
- Otherwise the setting of the unique constraint will fail and the module will fail to install.
-
- Notice:
- Odoo product variants is very special.
- When u create a product(not product template) with attribute, It would delete the first product, which
- have no attribute.
- So it's very normal that the first product variants begin wit ???-002.
- And we make a rule that the product variants can only create after you create normal product template.
-
-
How to use: Very simple
-
- After installed the app. You can Go to anyone of the menu:
-
-
- Sales->Configuration->Products->Product Internal Type
-
-
- Inventory->Configuration->Products->Product Internal Type
-
-
- Settings->Sequences & Identifiers->Product Internal Type
-
-
-
-
- You would see the default Product Intertype we create.
-
-
-
-
-
-
- And create the product and code by yourself.
-
-
-
-
-
- Notice: The "Sequence Code" Field of sequence must be "product.product"
-
-
-
-
- Go to Prior to installing this module, if you have any existing products you should ensure they already have
- a
- unique reference (or no reference) set.
- Products with a default_code of '/' or empty will automatically be assigned a code of "!!DP!!" followed
- by the system id for that product.
- Otherwise the setting of the unique constraint will fail and the module will fail to install.
-
- Notice:
- Odoo product variants is very special.
- When u create a product(not product template) with attribute, It would delete the first product, which
- have no attribute.
- So it's very normal that the first product variants begin wit ???-002.
- And we make a rule that the product variants can only create after you create normal product template.
-
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
\ No newline at end of file
diff --git a/app_product_type_sequence/static/description/set0.jpg b/app_product_type_sequence/static/description/set0.jpg
deleted file mode 100644
index 7cf34652..00000000
Binary files a/app_product_type_sequence/static/description/set0.jpg and /dev/null differ
diff --git a/app_product_type_sequence/static/description/set1.jpg b/app_product_type_sequence/static/description/set1.jpg
deleted file mode 100644
index 77910e22..00000000
Binary files a/app_product_type_sequence/static/description/set1.jpg and /dev/null differ
diff --git a/app_product_type_sequence/static/description/set2.jpg b/app_product_type_sequence/static/description/set2.jpg
deleted file mode 100644
index f05874e3..00000000
Binary files a/app_product_type_sequence/static/description/set2.jpg and /dev/null differ
diff --git a/app_product_type_sequence/static/description/set3.jpg b/app_product_type_sequence/static/description/set3.jpg
deleted file mode 100644
index 78c9e415..00000000
Binary files a/app_product_type_sequence/static/description/set3.jpg and /dev/null differ
diff --git a/app_product_type_sequence/static/description/set4.jpg b/app_product_type_sequence/static/description/set4.jpg
deleted file mode 100644
index f2d148cf..00000000
Binary files a/app_product_type_sequence/static/description/set4.jpg and /dev/null differ
diff --git a/app_product_type_sequence/static/description/set5.jpg b/app_product_type_sequence/static/description/set5.jpg
deleted file mode 100644
index 2d422293..00000000
Binary files a/app_product_type_sequence/static/description/set5.jpg and /dev/null differ
diff --git a/app_product_type_sequence/tests/__init__.py b/app_product_type_sequence/tests/__init__.py
deleted file mode 100644
index 269a938e..00000000
--- a/app_product_type_sequence/tests/__init__.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-from . import test_product_sequence
diff --git a/app_product_type_sequence/tests/test_product_sequence.py b/app_product_type_sequence/tests/test_product_sequence.py
deleted file mode 100644
index f275be4f..00000000
--- a/app_product_type_sequence/tests/test_product_sequence.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-'''
-Created on 2017-10-28
-@author: 广州尚鹏,http://www.sunpop.cn
-@email: 300883@qq.com
-@resource of Sunpop
-Odoo10离线中文用户手册下载
-http://www.sunpop.cn/odoo10_user_manual_document_offline/
-Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-http://www.sunpop.cn/odoo10_developer_document_offline/
-
-@description:
-'''
-
-from odoo.tests.common import TransactionCase
-from ..hooks import pre_init_hook
-
-
-class TestProductSequence(TransactionCase):
- """Tests for creating product with and without Product Sequence"""
-
- def setUp(self):
- super(TestProductSequence, self).setUp()
- self.product_product = self.env['product.product']
-
- def test_product_create_with_default_code(self):
- product = self.product_product.create(dict(
- name="Apple",
- default_code='PROD01'
- ))
- self.assertEqual(product.default_code, 'PROD01')
-
- def test_product_create_without_default_code(self):
- product_1 = self.product_product.create(dict(
- name="Orange",
- default_code='/'))
- self.assertRegexpMatches(str(product_1.default_code), r'PR/*')
-
- def test_product_copy(self):
- product_2 = self.product_product.create(dict(
- name="Apple",
- default_code='PROD02'
- ))
- copy_product_2 = product_2.copy()
- self.assertEqual(copy_product_2.default_code, 'PROD02-copy')
-
- def test_pre_init_hook(self):
- product_3 = self.product_product.create(dict(
- name="Apple",
- default_code='PROD03'
- ))
- self.cr.execute(
- "update product_product set default_code='/' where id=%s"
- % (product_3.id,))
- product_3.invalidate_cache()
- self.assertEqual(product_3.default_code, '/')
- pre_init_hook(self.cr)
- product_3.invalidate_cache()
- self.assertEqual(product_3.default_code, '!!mig!!%s' % (product_3.id,))
diff --git a/app_product_type_sequence/views/product_category_view.xml b/app_product_type_sequence/views/product_category_view.xml
deleted file mode 100644
index 7e1b5c79..00000000
--- a/app_product_type_sequence/views/product_category_view.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
-
-
- product.category.list.internal_type
- product.category
-
-
-
-
-
-
-
-
-
- product.category.form._internal_type
- product.category
-
-
-
-
-
-
-
-
-
diff --git a/app_product_type_sequence/views/product_internal_type_view.xml b/app_product_type_sequence/views/product_internal_type_view.xml
deleted file mode 100644
index 0af8523d..00000000
--- a/app_product_type_sequence/views/product_internal_type_view.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
- product.internal.type.tree
- product.internal.type
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- product.internal.type.form
- product.internal.type
-
-
-
-
-
-
- Product Internal Type
- ir.actions.act_window
- product.internal.type
- tree,form
-
-
-
-
-
-
-
-
-
-
diff --git a/app_product_type_sequence/views/product_product_view.xml b/app_product_type_sequence/views/product_product_view.xml
deleted file mode 100644
index 834bb3ef..00000000
--- a/app_product_type_sequence/views/product_product_view.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
- product.product.tree
- product.product
-
-
-
-
-
-
-
-
-
diff --git a/app_product_type_sequence/views/product_template_view.xml b/app_product_type_sequence/views/product_template_view.xml
deleted file mode 100644
index a26a5e81..00000000
--- a/app_product_type_sequence/views/product_template_view.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-
-
-
-
-
- product.template.product.tree
- product.template
-
-
-
-
-
-
-
-
-
- product.template.common.form
- product.template
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Products
- ir.actions.act_window
- product.template
- tree,kanban,form
- form
-
- {"search_default_filter_to_sell":1}
-
-
- Click to define a new product.
-
-
- You must define a product for everything you sell, whether it's a physical product, a consumable or a service you offer to customers.
-
-
- The product form contains information to simplify the sale process: price, notes in the quotation, accounting data, procurement methods,
- etc.
-
-
-
-
-
diff --git a/app_product_type_sequence/产品自动生成唯一编码自动输入关键属性-支持多规格.txt b/app_product_type_sequence/产品自动生成唯一编码自动输入关键属性-支持多规格.txt
deleted file mode 100644
index 4e5f1474..00000000
--- a/app_product_type_sequence/产品自动生成唯一编码自动输入关键属性-支持多规格.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-App Product Auto Sequence, Auto Code(Variants Supported)
-
-
- App Product Auto Sequence, Auto Code(Variants Supported), Auto Attributes
-
- This module allows to associate a sequence to the product reference.
- The reference (default code) is unique (SQL constraint) and required.
- Support Product with or without Variants.
- 1.Auto Sequence or code for every product.自动产品编码。
- 2.Auto Sequence or for every product variants, like product20171130-001.自动多规格产品编码,形式为 主产品编码-001。
- 3.Product code must be Unique.产品编码强制要求唯一。
- 4.Define different product type, each product type use own rule of sequence.可自定义产品类型,不同产品类型使用不同编码规则。
- 5.Quick access in sale , inventory, system menu.可以在销售、库存、系统菜单中快速定义。
- 6.Multi language support. 多语种支持。
- 7.Setup default Auto Sequence for each product category,自动设置每个产品目录使用的产品编码规则
- 8.Auto setup product attribute lik Sale/Purchase, Stockable/Consumable/Service, Stock Routes. 自动设置产品的销售/采购,可库存产品/服务/消耗品,购买/制造/按订单生成等库存路线
-
-http://www.sunpop.cn/product/app-product-auto-sequence-auto-codevariants-supported/
diff --git a/app_purchase_batch_procurement/__init__.py b/app_purchase_batch_procurement/__init__.py
deleted file mode 100644
index 2b1bf9fa..00000000
--- a/app_purchase_batch_procurement/__init__.py
+++ /dev/null
@@ -1,6 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from hooks import pre_init_hook
-from . import models
-from . import res
-from . import wizard
diff --git a/app_purchase_batch_procurement/__openerp__.py b/app_purchase_batch_procurement/__openerp__.py
deleted file mode 100644
index 656634da..00000000
--- a/app_purchase_batch_procurement/__openerp__.py
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 75695762@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-
-{
- 'name': "App Purchase Batch Procurement, Procurement product set supplier",
- 'version': '10.0.2.14',
- 'summary': """App Purchase Batch Procurement, Procurement product set supplier""",
- 'description': """
- 1. Product batch reorder, create procurement
- 产品批量补货
- 2. Procurement batch setup supplier, quick purchase
- 补货单快速设置供应商,直接生成采购询价单。
- 3. Product filter virtual view (available/exhausted/negative)
- 产品在途库存过滤
- 4. Multi language support, done for Chinese and English
- 多语言版本,默认支持中英双语
- """,
- 'author': 'Sunpop.cn',
- 'website': 'http://www.sunpop.cn',
- 'license': 'LGPL-3',
- 'category': 'Purchase',
- 'sequence': 0,
- 'pre_init_hook': 'pre_init_hook',
- 'images': ['static/description/banner.png'],
- 'depends': ['base', 'stock', 'purchase'],
- 'data': [
- 'views/asset_views.xml',
- 'views/procurement_order_views.xml',
- 'views/product_template_views.xml',
- 'views/menus.xml',
- 'wizard/product_set_supplier_views.xml',
- 'wizard/procurement_batch_generator_view.xml',
- ],
- 'demo': [
- ],
- 'test': [
- ],
- 'css': [
- ],
- 'qweb': [
- 'static/src/xml/tree_view_btn.xml'
- ],
- 'js': [
- ],
- 'images': [
- ],
- "price": 68.00,
- "currency": "EUR",
- 'installable': True,
- 'auto_install': False,
- 'application': True,
-}
diff --git a/app_purchase_batch_procurement/hooks.py b/app_purchase_batch_procurement/hooks.py
deleted file mode 100644
index 96ee6708..00000000
--- a/app_purchase_batch_procurement/hooks.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-22
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-def pre_init_hook(cr):
- """
- 数据初始化,只在安装时执行,更新时不执行
- """
- try:
- pass
- except Exception, e:
- raise Warning(e)
diff --git a/app_purchase_batch_procurement/i18n/zh_CN.po b/app_purchase_batch_procurement/i18n/zh_CN.po
deleted file mode 100644
index 9551a7c1..00000000
--- a/app_purchase_batch_procurement/i18n/zh_CN.po
+++ /dev/null
@@ -1,305 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_purchase_batch_procurement
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0+e-20171107\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-02-14 10:00+0000\n"
-"PO-Revision-Date: 2018-02-14 10:00+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_purchase_batch_procurement
-#: code:addons/app_purchase_batch_procurement/wizard/procurement_batch_generator.py:73
-#, python-format
-msgid "All requested quantities are null."
-msgstr "没有要补货的产品,请检查."
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.procurement_batch_generator_wiz_form
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.product_set_supplier_wiz_form
-msgid "Cancel"
-msgstr "取消"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_company_id
-msgid "Company"
-msgstr "公司"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_create_uid
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_create_uid
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_create_uid
-msgid "Created by"
-msgstr "创建人"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_create_date
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_create_date
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_create_date
-msgid "Created on"
-msgstr "创建时间"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_currency_id
-msgid "Currency"
-msgstr "币种"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_delay
-msgid "Delivery Lead Time"
-msgstr "交货周期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_display_name
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_display_name
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_display_name
-msgid "Display Name"
-msgstr "显示名称"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_date_end
-msgid "End Date"
-msgstr "结束日期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_date_end
-msgid "End date for this vendor price"
-msgstr "此供应商价格的结束日期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_virtual_available
-msgid "Forecast Quantity"
-msgstr "预测数量"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_id
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_id
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_id
-msgid "ID"
-msgstr "ID"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_outgoing_qty
-msgid "Incoming Quantity"
-msgstr "将入库"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator___last_update
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line___last_update
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz___last_update
-msgid "Last Modified on"
-msgstr "最后修改日"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_write_uid
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_write_uid
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_write_uid
-msgid "Last Updated by"
-msgstr "最后更新人"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_write_date
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_write_date
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_write_date
-msgid "Last Updated on"
-msgstr "最后更新时间"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_delay
-msgid "Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning."
-msgstr "提前时间是订单确认到仓库收到货物天数,使用于采购单自动计算规划调度"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model,name:app_purchase_batch_procurement.model_procurement_batch_generator_line
-msgid "Lines of the wizard to request procurements"
-msgstr "即将生成补货单的产品"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_min_qty
-msgid "Minimal Quantity"
-msgstr "最少数量"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_incoming_qty
-msgid "Outgoing Quantity"
-msgstr "将出库"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_parent_id
-msgid "Parent"
-msgstr "上级"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_date_planned
-msgid "Planned Date"
-msgstr "计划的日期"
-
-#. module: app_purchase_batch_procurement
-#: code:addons/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py:59
-#, python-format
-msgid "Please select valid procurement orders. Only the 'status=Exception' and 'Buy in Inventory Routes' product can be set!"
-msgstr "请选择有效的补货单。 只有 状态=异常 且 路线包含 '购买' 的 '可购买' 产品才可设置!"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_route_ids
-msgid "Preferred Routes"
-msgstr "首选路线"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_price
-msgid "Price"
-msgstr "价格"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_ids
-msgid "Procurement Request Lines"
-msgstr "补货明细"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.product_set_supplier_wiz_form
-msgid "Procurement list to setup supplier for the product"
-msgstr "待设置产品供应商的补货单"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_p_ids
-msgid "Procurement to set"
-msgstr "待处理的补货单"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_product_id
-msgid "Product"
-msgstr "产品"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.actions.act_window,name:app_purchase_batch_procurement.purchase_procurement_action
-#: model:ir.ui.menu,name:app_purchase_batch_procurement.felive_menu_purchase_procurement_action
-msgid "Purchase Procurement Orders"
-msgstr "待处理的采购补货"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_qty_available
-msgid "Quantity On Hand"
-msgstr "在手数量"
-
-#. module: app_purchase_batch_procurement
-#. openerp-web
-#: code:addons/app_purchase_batch_procurement/static/src/xml/tree_view_btn.xml:8
-#: model:ir.actions.act_window,name:app_purchase_batch_procurement.procurement_batch_generator_tree_action
-#: model:ir.actions.act_window,name:app_purchase_batch_procurement.procurement_batch_generator_tree_action2
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.procurement_batch_generator_wiz_form
-#, python-format
-msgid "Request Procurements"
-msgstr "补货请求"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_procurement_qty
-msgid "Requested Quantity"
-msgstr "补货数量"
-
-#. module: app_purchase_batch_procurement
-#. openerp-web
-#: code:addons/app_purchase_batch_procurement/static/src/xml/tree_view_btn.xml:5
-#: model:ir.actions.act_window,name:app_purchase_batch_procurement.action_product_set_supplier
-#: model:ir.actions.act_window,name:app_purchase_batch_procurement.product_set_supplier_action
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.product_set_supplier_wiz_form
-#, python-format
-msgid "Set Supplier"
-msgstr "设置供应商并创建采购询价单"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.product_set_supplier_wiz_form
-msgid "Set supplier and run Scheduler"
-msgstr "设定供应商并执行补货计算"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model,name:app_purchase_batch_procurement.model_product_set_supplier_wiz
-msgid "Set supplier for product"
-msgstr "指定相关产品模板的供应商"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_view_po
-msgid "Show relate RFQ after set supplier"
-msgstr "完成后编辑相关采购询价单"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_date_start
-msgid "Start Date"
-msgstr "开始日期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_date_start
-msgid "Start date for this vendor price"
-msgstr "此供应商价格的开始日期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_partner_id
-msgid "Supplier"
-msgstr "供应商"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_min_qty
-msgid "The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise."
-msgstr "从供应商采购的最小数量的计量单位在产品的供应商信息中有维护,如果没有维护,那么计量单位就是产品中默认设置的"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_price
-msgid "The price to purchase a product"
-msgstr "该价格购买产品"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_uom_id
-msgid "Unit of Measure"
-msgstr "计量单位"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.procurement_batch_generator_wiz_form
-msgid "Validate"
-msgstr "确定"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.product_set_supplier_wiz_form
-msgid "Validity From"
-msgstr "有效期"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_product_set_supplier_wiz_name
-msgid "Vendor"
-msgstr "供应商"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,help:app_purchase_batch_procurement.field_product_set_supplier_wiz_name
-msgid "Vendor of this product"
-msgstr "这个产品的供应商"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.felive_product_template_search_form_view_stock
-msgid "Virtual Available Products"
-msgstr "在途库存>0"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.felive_product_template_search_form_view_stock
-msgid "Virtual Exhausted Stock"
-msgstr "在途库存=0"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.ui.view,arch_db:app_purchase_batch_procurement.felive_product_template_search_form_view_stock
-msgid "Virtual Negative Stock"
-msgstr "在途库存<0"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model.fields,field_description:app_purchase_batch_procurement.field_procurement_batch_generator_line_warehouse_id
-msgid "Warehouse"
-msgstr "仓库"
-
-#. module: app_purchase_batch_procurement
-#: model:ir.model,name:app_purchase_batch_procurement.model_procurement_batch_generator
-msgid "Wizard to create procurements from product tree"
-msgstr "补货向导"
-
diff --git a/app_purchase_batch_procurement/ir/__init__.py b/app_purchase_batch_procurement/ir/__init__.py
deleted file mode 100644
index 40a96afc..00000000
--- a/app_purchase_batch_procurement/ir/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/app_purchase_batch_procurement/models/__init__.py b/app_purchase_batch_procurement/models/__init__.py
deleted file mode 100644
index 40a96afc..00000000
--- a/app_purchase_batch_procurement/models/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/app_purchase_batch_procurement/report/__init__.py b/app_purchase_batch_procurement/report/__init__.py
deleted file mode 100644
index 633f8661..00000000
--- a/app_purchase_batch_procurement/report/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# -*- coding: utf-8 -*-
-
diff --git a/app_purchase_batch_procurement/res/__init__.py b/app_purchase_batch_procurement/res/__init__.py
deleted file mode 100644
index 40a96afc..00000000
--- a/app_purchase_batch_procurement/res/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
diff --git a/app_purchase_batch_procurement/static/description/banner.png b/app_purchase_batch_procurement/static/description/banner.png
deleted file mode 100644
index 26504068..00000000
Binary files a/app_purchase_batch_procurement/static/description/banner.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/cnreadme.png b/app_purchase_batch_procurement/static/description/cnreadme.png
deleted file mode 100644
index 4ce57a5f..00000000
Binary files a/app_purchase_batch_procurement/static/description/cnreadme.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo11.png b/app_purchase_batch_procurement/static/description/demo11.png
deleted file mode 100644
index 26504068..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo11.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo12.png b/app_purchase_batch_procurement/static/description/demo12.png
deleted file mode 100644
index c8262d67..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo12.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo21.png b/app_purchase_batch_procurement/static/description/demo21.png
deleted file mode 100644
index 2210b457..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo21.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo31.png b/app_purchase_batch_procurement/static/description/demo31.png
deleted file mode 100644
index 5514661b..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo31.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo41.png b/app_purchase_batch_procurement/static/description/demo41.png
deleted file mode 100644
index d22039a7..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo41.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo51.png b/app_purchase_batch_procurement/static/description/demo51.png
deleted file mode 100644
index a911f70b..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo51.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo61.png b/app_purchase_batch_procurement/static/description/demo61.png
deleted file mode 100644
index 7f5c5249..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo61.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo71.png b/app_purchase_batch_procurement/static/description/demo71.png
deleted file mode 100644
index e380dd29..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo71.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/demo81.png b/app_purchase_batch_procurement/static/description/demo81.png
deleted file mode 100644
index 15c226d7..00000000
Binary files a/app_purchase_batch_procurement/static/description/demo81.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/icon.png b/app_purchase_batch_procurement/static/description/icon.png
deleted file mode 100644
index 2a04f219..00000000
Binary files a/app_purchase_batch_procurement/static/description/icon.png and /dev/null differ
diff --git a/app_purchase_batch_procurement/static/description/index.html b/app_purchase_batch_procurement/static/description/index.html
deleted file mode 100644
index 9c8a3e25..00000000
--- a/app_purchase_batch_procurement/static/description/index.html
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
App Purchase Batch Procurement, Procurement product set supplier
-
-
This moduld is to easy purchase
-
Lastest update: v10.0.2.14, 2018-02-14
-
- 1. Product batch reorder, create procurement
- 2. Procurement batch setup supplier, quick purchase
- 3. Product filter virtual view (available/exhausted/negative), and auto set procurement quantity
-
-
-
-
-
-
-
-
-
-
-
-
-
-
1. Procurement batch setup supplier, quick purchase
-
-
-
-
-
-
-
So you can get the procurement
-
-
-
-
-
-
-
-
2. Procurement batch setup supplier, quick purchase
-
-
-
-
-
-
-
So you can get the purchase of all product
-
-
-
-
-
-
-
-
-
3. Product filter virtual view (available/exhausted/negative), and auto set procurement quantity
-
-
-
-
-
The procurement quantity would be auto set
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
-
diff --git a/app_purchase_batch_procurement/static/src/js/btn_set_supplier.js b/app_purchase_batch_procurement/static/src/js/btn_set_supplier.js
deleted file mode 100644
index 23bb5291..00000000
--- a/app_purchase_batch_procurement/static/src/js/btn_set_supplier.js
+++ /dev/null
@@ -1,66 +0,0 @@
-odoo.define('app_purchase_batch_procurement.btn_set_supplier', function (require) {
- "use strict";
-
- var core = require('web.core');
- var ListView = require('web.ListView');
- var web_client = require('web.web_client')
- var QWeb = core.qweb;
-
- ListView.include({
-
- render_buttons: function ($node) {
- if ($node) {
- var self = this;
- this._super($node);
- this.$buttons.find('.o_list_btn_set_supplier').click(this.proxy('set_supplier_action'));
- this.$buttons.find('.o_list_btn_batch_procurement').click(this.proxy('batch_procurement_action'));
- }
- },
- set_supplier_action: function () {
- //纯js取
- // var active_ids = $.map($('.o_list_view .o_list_record_selector :checkbox:checked'), function (el) {
- // return $(el).closest('tr').data('id');
- // });
- //odoo内置方法取值
- var active_ids = this.groups.get_selection().ids
- this.do_action({
- type: "ir.actions.act_window",
- name: " Set Supplier",
- res_model: "product.set.supplier.wiz",
- views: [[false, 'form']],
- view_type: 'form',
- view_mode: 'form',
- multi: 1,
- key2: "client_action_multi",
- src_model: "procurement.order",
- active_model: "procurement.order",
- target: 'new',
- context: {'active_ids': active_ids}
- });
- return {'type': 'ir.actions.client'}
- },
- batch_procurement_action: function () {
- // var active_ids = self.$.map($('.o_list_view .o_list_record_selector :checkbox:checked'), function (el) {
- // return $(el).closest('tr').data('id');
- // });
- var active_ids = this.groups.get_selection().ids
- // var active_ids = self.getSelection().ids;
- this.do_action({
- type: "ir.actions.act_window",
- name: "Request Procurements",
- res_model: "procurement.batch.generator",
- views: [[false, 'form']],
- view_type: 'form',
- view_mode: 'form',
- multi: 1,
- key2: "client_action_multi",
- src_model: "product.product",
- active_model: "product.product",
- target: 'new',
- context: {'active_ids': active_ids}
- });
- return {'type': 'ir.actions.client'}
- }
- });
-
-});
\ No newline at end of file
diff --git a/app_purchase_batch_procurement/static/src/xml/tree_view_btn.xml b/app_purchase_batch_procurement/static/src/xml/tree_view_btn.xml
deleted file mode 100644
index 0849eb6e..00000000
--- a/app_purchase_batch_procurement/static/src/xml/tree_view_btn.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
- Set Supplier
-
-
- Request Procurements
-
-
-
-
\ No newline at end of file
diff --git a/app_purchase_batch_procurement/views/asset_views.xml b/app_purchase_batch_procurement/views/asset_views.xml
deleted file mode 100644
index dd5311b4..00000000
--- a/app_purchase_batch_procurement/views/asset_views.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_purchase_batch_procurement/views/menus.xml b/app_purchase_batch_procurement/views/menus.xml
deleted file mode 100644
index 6c216e82..00000000
--- a/app_purchase_batch_procurement/views/menus.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
diff --git a/app_purchase_batch_procurement/views/procurement_order_views.xml b/app_purchase_batch_procurement/views/procurement_order_views.xml
deleted file mode 100644
index 7bc8ae80..00000000
--- a/app_purchase_batch_procurement/views/procurement_order_views.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- Purchase Procurement Orders
- ir.actions.act_window
- procurement.order
- form
- tree,form
- [('rule_id.action', '=', 'buy')]
- {'search_default_exceptions': 1}
-
-
-
diff --git a/app_purchase_batch_procurement/views/product_template_views.xml b/app_purchase_batch_procurement/views/product_template_views.xml
deleted file mode 100644
index a063e353..00000000
--- a/app_purchase_batch_procurement/views/product_template_views.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
- felive.product.template.search.stock.form
- product.template
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app_purchase_batch_procurement/wizard/__init__.py b/app_purchase_batch_procurement/wizard/__init__.py
deleted file mode 100644
index 714bb2a5..00000000
--- a/app_purchase_batch_procurement/wizard/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from . import product_set_supplier_wiz
-from . import procurement_batch_generator
diff --git a/app_purchase_batch_procurement/wizard/procurement_batch_generator.py b/app_purchase_batch_procurement/wizard/procurement_batch_generator.py
deleted file mode 100644
index efcc8307..00000000
--- a/app_purchase_batch_procurement/wizard/procurement_batch_generator.py
+++ /dev/null
@@ -1,129 +0,0 @@
-# -*- encoding: utf-8 -*-
-
-
-from odoo import models, fields, api, _
-import odoo.addons.decimal_precision as dp
-from odoo.exceptions import Warning
-from datetime import datetime, timedelta
-from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
-
-
-class ProcurementBatchGenerator(models.TransientModel):
- _name = 'procurement.batch.generator'
- _description = 'Wizard to create procurements from product tree'
-
- route_ids = fields.Many2many('stock.location.route', string='Preferred Routes')
- line_ids = fields.One2many(
- 'procurement.batch.generator.line', 'parent_id',
- string='Procurement Request Lines')
-
- @api.model
- def default_get(self, fields):
- res = super(ProcurementBatchGenerator, self).default_get(fields)
- assert isinstance(self.env.context['active_ids'], list),\
- "context['active_ids'] must be a list"
- line_ids = []
- warehouses = self.env['stock.warehouse'].search(
- [('company_id', '=', self.env.user.company_id.id)])
- warehouse_id = warehouses and warehouses[0].id or False
- # product.template是被继承的,所以用同样方法即可
- for product in self.env['product.product'].browse(
- self.env.context['active_ids']):
- # todo: 库存的数量在此使用会导致运算量较大,停用。 如需要再加。未来可以考虑数据全部从前端送过来,不需再查数据库
- # partner_id = product.seller_ids and product.seller_ids[0].id or False
- if product.virtual_available < 0:
- procurement_qty = product.virtual_available * -1
- else:
- procurement_qty = 1
- line_ids.append([0, 0, {
- 'name': product.name,
- 'product_id': product.id,
- # 'partner_id': partner_id,
- # 'qty_available': product.qty_available,
- 'virtual_available': product.virtual_available,
- # 'outgoing_qty': product.outgoing_qty,
- # 'incoming_qty': product.incoming_qty,
- 'uom_id': product.uom_id.id,
- # 按预测库存数补货,or 1
- 'procurement_qty': procurement_qty,
- 'warehouse_id': warehouse_id,
- 'date_planned': datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT),
- }])
- try:
- res.update({
- 'line_ids': line_ids,
- })
- except:
- pass
- return res
-
- @api.multi
- def validate(self):
- self.ensure_one()
- wiz = self[0]
- assert wiz.line_ids, 'wizard must have some lines'
- procs = self.env['procurement.order']
- for line in wiz.line_ids:
- if not line.procurement_qty:
- continue
- procurement = self.env['procurement.order'].create(
- line._prepare_procurement_order())
- procs += procurement
- if not procs.ids:
- raise Warning(_('All requested quantities are null.'))
- # todo: 看是否需要记录工作流
- # self.pool['procurement.order'].signal_workflow(
- # self._cr, self._uid, new_po_ids, 'button_confirm')
- # todo: 看是用 self.pool还是直接run,当前用直接run
- # self.pool['procurement.order'].run(
- # self._cr, self._uid, new_po_ids, context=self.env.context)
- procs.run()
- action = self.env.ref('procurement.procurement_action').read()[0]
- action['domain'] = [('id', 'in', procs.ids)]
- return action
-
-class ProcurementBatchGeneratorLine(models.TransientModel):
- _name = 'procurement.batch.generator.line'
- _description = 'Lines of the wizard to request procurements'
-
- parent_id = fields.Many2one(
- 'procurement.batch.generator', string='Parent')
- product_id = fields.Many2one(
- 'product.product', string='Product', readonly=True)
- partner_id = fields.Many2one(
- 'res.partner', string='Supplier', required=False)
- qty_available = fields.Float(
- string='Quantity On Hand',
- digits=dp.get_precision('Product Unit of Measure'), readonly=True)
- virtual_available = fields.Float(
- string='Forecast Quantity',
- digits=dp.get_precision('Product Unit of Measure'), readonly=True)
- outgoing_qty = fields.Float(
- string='Incoming Quantity',
- digits=dp.get_precision('Product Unit of Measure'), readonly=True)
- incoming_qty = fields.Float(
- string='Outgoing Quantity',
- digits=dp.get_precision('Product Unit of Measure'), readonly=True)
- procurement_qty = fields.Float(
- string='Requested Quantity',
- digits=dp.get_precision('Product Unit of Measure'), default=1)
- uom_id = fields.Many2one(
- 'product.uom', string='Unit of Measure', readonly=True)
- warehouse_id = fields.Many2one(
- 'stock.warehouse', string='Warehouse')
- date_planned = fields.Datetime(string='Planned Date')
-
- @api.multi
- def _prepare_procurement_order(self):
- self.ensure_one()
- vals = {
- 'name': 'INT: %s' % (self.env.user.login),
- 'date_planned': self.date_planned,
- 'product_id': self.product_id.id,
- 'product_qty': self.procurement_qty,
- 'product_uom': self.uom_id.id,
- 'location_id': self.warehouse_id.lot_stock_id.id,
- 'company_id': self.warehouse_id.company_id.id,
- 'route_ids': [(6, 0, self.parent_id.route_ids.ids)],
- }
- return vals
diff --git a/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml b/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml
deleted file mode 100644
index 2a6fc4df..00000000
--- a/app_purchase_batch_procurement/wizard/procurement_batch_generator_view.xml
+++ /dev/null
@@ -1,53 +0,0 @@
-
-
-
-
- procurement.batch.generator.form
- procurement.batch.generator
-
-
-
-
-
-
-
-
-
diff --git a/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml b/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml
deleted file mode 100644
index e7bbe2af..00000000
--- a/app_purchase_batch_procurement/wizard/product_set_supplier_views.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
- product.set.supplier.wiz.form
- product.set.supplier.wiz
-
-
-
-
-
-
- Set Supplier
- product.set.supplier.wiz
- form
- form
-
- new
-
-
-
-
-
diff --git a/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py b/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py
deleted file mode 100644
index 36bcf0a8..00000000
--- a/app_purchase_batch_procurement/wizard/product_set_supplier_wiz.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from odoo import api, fields, models, _
-from datetime import datetime, timedelta
-from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
-import odoo.addons.decimal_precision as dp
-from odoo.exceptions import UserError
-import time
-
-class ProductSetSupplierWiz(models.TransientModel):
- _name = 'product.set.supplier.wiz'
- _description = 'Set supplier for product'
-
- name = fields.Many2one(
- 'res.partner', 'Vendor',
- domain=[('supplier', '=', True)], ondelete='cascade', required=True,
- help="Vendor of this product")
- min_qty = fields.Float(
- 'Minimal Quantity', default=0.0, required=True,
- help="The minimal quantity to purchase from this vendor, expressed in the vendor Product Unit of Measure if not any, in the default unit of measure of the product otherwise.")
- price = fields.Float(
- 'Price', default=0.0, digits=dp.get_precision('Product Price'),
- required=True, help="The price to purchase a product")
- company_id = fields.Many2one(
- 'res.company', 'Company',
- default=lambda self: self.env.user.company_id.id, index=1)
- currency_id = fields.Many2one(
- 'res.currency', 'Currency',
- default=lambda self: self.env.user.company_id.currency_id.id,
- required=True)
- date_start = fields.Date('Start Date', help="Start date for this vendor price")
- date_end = fields.Date('End Date', help="End date for this vendor price")
- delay = fields.Integer(
- 'Delivery Lead Time', default=1, required=True,
- help="Lead time in days between the confirmation of the purchase order and the receipt of the products in your warehouse. Used by the scheduler for automatic computation of the purchase order planning.")
-
- # 通过过滤得到要设置的补货单
- p_ids = fields.Many2many('procurement.order', string='Procurement to set', readonly=True)
- # 设置完后是否直接显示po
- view_po = fields.Boolean('Show relate RFQ after set supplier', default=True)
-
- # 默认值
- @api.model
- def default_get(self, fields):
- res = super(ProductSetSupplierWiz, self).default_get(fields)
- res['create_uid'] = self.env.user.id
- if not res.get('min_qty'):
- res['min_qty'] = 1
- if not res.get('date_start'):
- res['date_start'] = datetime.now().strftime(DEFAULT_SERVER_DATETIME_FORMAT)
- if not res.get('date_end'):
- res['date_end'] = (datetime.now() + timedelta(days=1)).strftime(DEFAULT_SERVER_DATETIME_FORMAT)
-
- procs_ids = self.env.context.get('active_ids')
- procs = self.env['procurement.order'].browse(procs_ids).filtered(lambda x: x.rule_id.action == 'buy' and x.state == 'exception')
- p_ids = procs.ids
- res['p_ids'] = p_ids
- if len(p_ids) < 1:
- raise UserError(_("Please select valid procurement orders. Only the 'status=Exception' and 'Buy in Inventory Routes' product can be set!"))
- # 请选择有效的补货单。只有需要采购的异常补货单才可进行设置!
- return res
-
- # 为选定的产品设定供应商,只处理系统没处理的
- @api.multi
- def set_supplier(self):
- self.ensure_one()
- procs_ids = self.env.context.get('active_ids')
- procs = self.env['procurement.order'].browse(procs_ids).filtered(lambda x: x.rule_id.action == 'buy' and x.state == 'exception')
- t_ids = procs.mapped('product_id.product_tmpl_id').ids
- # 去重复
- t_ids = list(set(t_ids))
- for t in t_ids:
- self.env['product.supplierinfo'].create({
- 'name': self.name.id,
- 'product_tmpl_id': t,
- 'min_qty': self.min_qty,
- 'date_start': self.date_start,
- 'date_end': self.date_end,
- 'delay': self.delay,
- })
- time.sleep(1)
- procs.run()
- if self.view_po:
- time.sleep(2)
- p_names = procs.mapped('purchase_id.name')
- p_names = list(set(p_names))
- domain = [["name", "in", p_names]]
- context = {
- 'search_default_name': p_names[0],
- }
- action = self.env.ref('purchase.purchase_rfq').read()[0]
- if len(p_names) == 1:
- action.update({
- 'context': context,
- })
- elif len(p_names) > 1:
- action.update({
- 'domain': domain,
- })
- return action
diff --git a/app_search_range/__init__.py b/app_search_range/__init__.py
deleted file mode 100644
index 7c68785e..00000000
--- a/app_search_range/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-# -*- coding: utf-8 -*-
\ No newline at end of file
diff --git a/app_search_range/__openerp__.py b/app_search_range/__openerp__.py
deleted file mode 100644
index d50bb331..00000000
--- a/app_search_range/__openerp__.py
+++ /dev/null
@@ -1,49 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-{
- 'name': 'App Search By Date (Datetime) or Number Range',
- 'version': '10.0.1.0',
- 'author': 'Sunpop.cn',
- 'category': 'web',
- 'website': 'http://www.sunpop.cn',
- 'license': 'AGPL-3',
- 'sequence': 2,
- 'summary': 'Search by date or number range in List view and Pivot view',
- 'description': """
-
-Search by date or number range in List view and Pivot view
---------------------------------------------------
-
- """,
- 'depends': ['web','app_odoo_customize'],
- 'data': [
- 'views/template_view.xml',
- # data
- 'data/ir_config_parameter.xml',
- ],
- 'qweb': [
- 'static/src/xml/*.xml',
- ],
- "price": 68.00,
- "currency": "EUR",
-
- 'images': ['static/description/list_pivot.png'],
-
- 'installable': True,
- 'auto_install': False,
- 'application': True,
-}
diff --git a/app_search_range/data/ir_config_parameter.xml b/app_search_range/data/ir_config_parameter.xml
deleted file mode 100644
index 4369230f..00000000
--- a/app_search_range/data/ir_config_parameter.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
- app_show_search_date
- True
-
-
- app_show_search_number
- True
-
-
-
\ No newline at end of file
diff --git a/app_search_range/i18n/zh_CN.po b/app_search_range/i18n/zh_CN.po
deleted file mode 100644
index 86bdb878..00000000
--- a/app_search_range/i18n/zh_CN.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_odoo_customize
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0c\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-08-07 08:57+0000\n"
-"PO-Revision-Date: 2017-08-07 08:57+0000\n"
-"Last-Translator: Ivan Deng <300883@qq.com>, 2017\n"
-"Language-Team: http://www.sunpop.cn \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: \n"
-"Language: zh_CN\n"
-"Plural-Forms: nplurals=1; plural=0;\n"
-
-#. module: app_search_range
-#. openerp-web
-#: code:addons/app_search_range/static/src/xml/pivot_view.xml:18
-#, python-format
-msgid "Start date"
-msgstr "开始日期"
-
-#. module: app_search_range
-#. openerp-web
-#: code:addons/app_search_range/static/src/xml/pivot_view.xml:22
-#, python-format
-msgid "End date"
-msgstr "结束日期"
-
-#. module: app_search_range
-#. openerp-web
-#: code:addons/app_search_range/static/src/xml/pivot_view.xml:45
-#, python-format
-msgid "From"
-msgstr "从"
-
-
-#. module: app_search_range
-#. openerp-web
-#: code:addons/app_search_range/static/src/xml/pivot_view.xml:49
-#, python-format
-msgid "To"
-msgstr "至"
diff --git a/app_search_range/static/description/date_range.jpg b/app_search_range/static/description/date_range.jpg
deleted file mode 100644
index 8b702b90..00000000
Binary files a/app_search_range/static/description/date_range.jpg and /dev/null differ
diff --git a/app_search_range/static/description/date_range.png b/app_search_range/static/description/date_range.png
deleted file mode 100644
index 317099b9..00000000
Binary files a/app_search_range/static/description/date_range.png and /dev/null differ
diff --git a/app_search_range/static/description/icon.png b/app_search_range/static/description/icon.png
deleted file mode 100644
index 4c57f611..00000000
Binary files a/app_search_range/static/description/icon.png and /dev/null differ
diff --git a/app_search_range/static/description/index.html b/app_search_range/static/description/index.html
deleted file mode 100644
index 197a65aa..00000000
--- a/app_search_range/static/description/index.html
+++ /dev/null
@@ -1,91 +0,0 @@
-
-
-
-
App Search By Date or Number Range
-
-
This moduld allows user to Search by date or number range in List view and Pivot view.
-
-
- 1.List all the date/datetime field to select range
- 2.List all the integer/float/Monetary field to select range
- 3.Auto get user timezone, global Timezone supported.
- 4.Easy admin to enable/disable the search.
-
-
-
-
-
-
-
-
Date range
-
-
-
-
-
-
-
-
-
Value range
-
-
-
-
-
-
-
-
-
Pivot View
-
-
-
-
-
-
-
-
-
How to setup
-
Go to Menu: Settings->Technical->Parameters->System Parameters
-
You can find "app_show_search_date" and "app_show_search_number"
-
Go to Menu: Settings->Technical->Parameters->System Parameters.
-
Set the Value to "False" if you do not want to show the search. And set "True" to show.
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_search_range/static/description/list_pivot.jpg b/app_search_range/static/description/list_pivot.jpg
deleted file mode 100644
index 6b9ff4e8..00000000
Binary files a/app_search_range/static/description/list_pivot.jpg and /dev/null differ
diff --git a/app_search_range/static/description/list_pivot.png b/app_search_range/static/description/list_pivot.png
deleted file mode 100644
index 59bf05cd..00000000
Binary files a/app_search_range/static/description/list_pivot.png and /dev/null differ
diff --git a/app_search_range/static/description/setup.jpg b/app_search_range/static/description/setup.jpg
deleted file mode 100644
index dcfaaf54..00000000
Binary files a/app_search_range/static/description/setup.jpg and /dev/null differ
diff --git a/app_search_range/static/description/setup.png b/app_search_range/static/description/setup.png
deleted file mode 100644
index 0c79efd6..00000000
Binary files a/app_search_range/static/description/setup.png and /dev/null differ
diff --git a/app_search_range/static/description/setup1.jpg b/app_search_range/static/description/setup1.jpg
deleted file mode 100644
index 7841f91a..00000000
Binary files a/app_search_range/static/description/setup1.jpg and /dev/null differ
diff --git a/app_search_range/static/description/setup1.png b/app_search_range/static/description/setup1.png
deleted file mode 100644
index eea3338d..00000000
Binary files a/app_search_range/static/description/setup1.png and /dev/null differ
diff --git a/app_search_range/static/description/value_range.jpg b/app_search_range/static/description/value_range.jpg
deleted file mode 100644
index 424b1369..00000000
Binary files a/app_search_range/static/description/value_range.jpg and /dev/null differ
diff --git a/app_search_range/static/description/value_range.png b/app_search_range/static/description/value_range.png
deleted file mode 100644
index e1b33e3b..00000000
Binary files a/app_search_range/static/description/value_range.png and /dev/null differ
diff --git a/app_search_range/static/src/css/app_search_range.css b/app_search_range/static/src/css/app_search_range.css
deleted file mode 100644
index 673b57ff..00000000
--- a/app_search_range/static/src/css/app_search_range.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.tree_search_item {
- cursor: pointer;
-}
-
-.tree_search_item .selected a:before {
- font-family: FontAwesome;
- position: absolute;
- left: 6px;
- top: 3px;
- content: "";
-}
\ No newline at end of file
diff --git a/app_search_range/static/src/js/pivot.js b/app_search_range/static/src/js/pivot.js
deleted file mode 100644
index e758a449..00000000
--- a/app_search_range/static/src/js/pivot.js
+++ /dev/null
@@ -1,257 +0,0 @@
-odoo.define('app_search_range_range.pivot', function (require) {
-"use strict";
-
-var time = require('web.time');
-var core = require('web.core');
-var data = require('web.data');
-var session = require('web.session');
-var utils = require('web.utils');
-var Model = require('web.Model');
-var PivotView = require('web.PivotView');
-var datepicker = require('web.datepicker');
-
-var _t = core._t;
-var _lt = core._lt;
-var QWeb = core.qweb;
-
-PivotView.include({
-
- init: function() {
- this._super.apply(this, arguments);
- this.ts_fields = [];
- },
-
- tgl_on_button_click: function (event) {
- var self = this;
- var $target = $(event.target),
- field, key, first_item;
-
- field = $target.parent().data('field');
- key = $target.parent().data('key');
-
- if (field == -1) {
- first_item = $target.parent().parent().children('.tgl_first_item.selected');
- if (!first_item.length) {
- $target.parent().parent().children('li').removeClass('selected')
- }
- } else {
- first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected');
- }
-
- $target.parent().toggleClass('selected');
- this.tgl_search()
- event.stopPropagation();
-
- },
-
-
- render_buttons: function($node) {
- var self = this;
- var ts_context = this.context.tree_search;
-
- this._super.apply(this, arguments);
-
- var l10n = _t.database.parameters;
- var datepickers_options = {
- pickTime: false,
- startDate: moment({ y: 1900 }),
- endDate: moment().add(200, "y"),
- calendarWeeks: true,
- icons : {
- time: 'fa fa-clock-o',
- date: 'fa fa-calendar',
- up: 'fa fa-chevron-up',
- down: 'fa fa-chevron-down'
- },
- language : moment.locale(),
- format : time.strftime_to_moment_format(l10n.date_format),
- }
-
- // Dropdown list
-
- $(QWeb.render("TGL.TreeSearch.Placeholder", {})).appendTo($node);
-
- _.each(ts_context, function(item){
- var field = _.find(self.fields, function(value, key, list){
- return value.type == 'many2one' && value.relation && key === item.name;
- });
-
- if (field) {
- self.ts_fields.push(item.name);
-
- new Model(field.relation).query(['id', 'display_name']).filter(new data.CompoundDomain(item.domain, field.domain)).context(new data.CompoundContext()).order_by('app_sequence').all().then(function (result) {
- var $multi_search = $(QWeb.render("TGL.TreeSearch.Item", {'widget': {
- 'string': item.string,
- 'key': item.name,
- 'class_name': 'app_multi_item_' + item.name,
- 'fields': result,
- }}))
-
- $multi_search.find('li').click(self.tgl_on_button_click.bind(self));
-
- setTimeout(function(){
- $multi_search.appendTo($('.treesearch_placeholder'));
- }, 2000);
- });
- }
- });
- // self.$buttons.find('.app-search').remove();
-
- var date_fields = [];
- // 增加参数控制app_show_search_date
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_date']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.fields, function (value, key, list) {
- if (value.store && value.type === "datetime" || value.type === "date") {
- date_fields.push([key, value.string]);
- }
- });
-
- if (date_fields.length > 0) {
- self.$search_button = $(QWeb.render('odooApp.buttons', {'date_fields': date_fields}))
- self.$search_button.find('.app_start_date').datetimepicker(datepickers_options);
- self.$search_button.find('.app_end_date').datetimepicker(datepickers_options);
- self.$search_button.find('.app_start_date').on('change', function () {
- self.tgl_search();
- });
- self.$search_button.find('.app_end_date').on('change', function () {
- self.tgl_search();
- });
- self.$search_button.find('.app_select_field').on('change', function () {
- self.tgl_search();
- });
- setTimeout(function () {
- self.$search_button.insertBefore($('.treesearch_placeholder'));
- }, 500);
- }
- }
- });
-
- var number_fields = [];
-
- // 增加参数控制app_show_search_number
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_number']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- number_fields = [];
- _.each(self.fields, function (value, key, list) {
- if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) {
- number_fields.push([key, value.string]);
- }
- });
-
- if (number_fields.length > 0) {
- self.$search_range = $(QWeb.render('odooApp.SearchRange', {'number_fields': number_fields}))
- self.$search_range.find('.app_select_range_field').on('change', function () {
- self.tgl_search();
- });
- self.$search_range.find('.app_start_range').on('change', function () {
- self.tgl_search();
- });
- self.$search_range.find('.app_end_range').on('change', function () {
- self.tgl_search();
- });
- setTimeout(function () {
- self.$search_range.insertBefore($('.treesearch_placeholder'));
- }, 500);
- }
- }
- });
- },
-
- do_search: function(domain, context, group_by) {
- var self = this;
- this.last_domain = domain;
- this.last_context = context;
- this.last_group_by = group_by;
- this.old_search = _.bind(this._super, this);
- return self.tgl_search();
- },
-
- tgl_search: function() {
- var self = this;
- var domain = [], value, value_tmp;
-
- _.each(self.ts_fields, function(field){
- value = $('.app_item_' + field).val();
-
- var select_fields = $('.app_multi_item_' + field).children('.selected'),
- select_value = [];
- if (select_fields.length > 0) {
- _.each(select_fields, function(item){
- value_tmp = $(item).data('field');
- if (value_tmp > 0) {
- select_value.push($(item).data('field'));
- }
- });
- if (select_value.length) {
- domain.push([field, 'in', select_value]);
- }
-
- }
- });
-
-// 注意,date和datetime型的处理是不同的,已处理完
- if (self.$search_button) {
- var start_date = self.$search_button.find('.app_start_date').val(),
- end_date = self.$search_button.find('.app_end_date').val(),
- field = self.$search_button.find('.app_select_field').val(),
- field_type = 'datetime';
- var tz = session.user_context.tz,
- start_utc,
- end_utc;
-
- _.each(self.columns, function (value, key, list) {
- if (value.name == field) {
- field_type = value.type;
- return false;
- }
- });
-
- moment.locale(tz);
- var l10n = _t.database.parameters;
- if (start_date) {
- if (field_type == 'date') {
- //日期类型,无须utc处理
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '>=', start_date]);
- } else {
- //日期时间,处理utc
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- start_utc = moment(start_date)
- domain.push([field, '>=', start_utc]);
- }
- }
- if (end_date) {
- if (field_type == 'date') {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '<=', end_date]);
- } else {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- end_utc = moment(end_date)
- domain.push([field, '<=', end_utc]);
- }
- }
- }
-
- if (self.$search_range) {
- var start_range = self.$search_range.find('.app_start_range').val(),
- end_range = self.$search_range.find('.app_end_range').val(),
- range_field = self.$search_range.find('.app_select_range_field').val();
-
- if (start_range) {
- domain.push([range_field, '>=', parseInt(start_range)]);
- }
- if (end_range) {
- domain.push([range_field, '<=', parseInt(end_range)]);
- }
- }
- // console.log(domain);
- var compound_domain = new data.CompoundDomain(self.last_domain, domain);
- self.dataset.domain = compound_domain.eval();
- return self.old_search(compound_domain, self.last_context, self.last_group_by);
- },
-
-
-});
-
-});
\ No newline at end of file
diff --git a/app_search_range/static/src/js/tree.js b/app_search_range/static/src/js/tree.js
deleted file mode 100644
index 9d0ca0c3..00000000
--- a/app_search_range/static/src/js/tree.js
+++ /dev/null
@@ -1,271 +0,0 @@
-odoo.define('app_search_range_range.tree', function (require) {
-"use strict";
-
-var time = require('web.time');
-var core = require('web.core');
-var data = require('web.data');
-var session = require('web.session');
-var utils = require('web.utils');
-var Model = require('web.Model');
-var ListView = require('web.ListView');
-var datepicker = require('web.datepicker');
-var ViewManager = require('web.ViewManager')
-var _t = core._t;
-var _lt = core._lt;
-var QWeb = core.qweb;
-
-ListView.include({
-
- init: function(parent, dataset, view_id, options) {
- this._super.apply(this, arguments);
- this.ts_context = dataset.context.tree_search;
- this.fields_range = dataset.context.fields_range;
- this.ts_fields = [];
- },
-
- on_button_click: function (event) {
- var self = this;
- var $target = $(event.target),
- field, key, first_item;
-
- field = $target.parent().data('field');
- key = $target.parent().data('key');
-
- if (field == -1) {
- first_item = $target.parent().parent().children('.tgl_first_item.selected');
- if (!first_item.length) {
- $target.parent().parent().children('li').removeClass('selected')
- }
- } else {
- first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected');
- }
-
- $target.parent().toggleClass('selected');
- this.tgl_search()
- event.stopPropagation();
-
- },
-
- render_buttons: function($node) {
- var self = this;
- this._super.apply(this, arguments);
-
- var l10n = _t.database.parameters;
- var datepickers_options = {
- pickTime: false,
- startDate: moment({ y: 1900 }),
- endDate: moment().add(200, "y"),
- calendarWeeks: true,
- icons : {
- time: 'fa fa-clock-o',
- date: 'fa fa-calendar',
- up: 'fa fa-chevron-up',
- down: 'fa fa-chevron-down'
- },
- language : moment.locale(),
- format : time.strftime_to_moment_format(l10n.date_format),
- }
-
- self.$buttons.find('.app-search').remove();
-
- var date_fields = [];
- // 增加参数控制app_show_search_date
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_date']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.columns, function (value, key, list) {
- if (value.store && value.type === "datetime" || value.type === "date") {
- date_fields.push([value.name, value.string, value.type]);
- }
- });
- if (date_fields.length > 0) {
- self.$search_button = $(QWeb.render('odooApp.buttons', {'date_fields': date_fields}))
- self.$search_button.find('.app_start_date').datetimepicker(datepickers_options);
- self.$search_button.find('.app_end_date').datetimepicker(datepickers_options);
- // self.$search_button.find('.app_search_date_rate').click(function() {
- // self.tgl_search();
- // });
- self.$search_button.find('.app_start_date').on('change', function () {
- self.tgl_search();
- });
- self.$search_button.find('.app_end_date').on('change', function () {
- self.tgl_search();
- });
- self.$search_button.find('.app_select_field').on('change', function () {
- self.tgl_search();
- });
- self.$search_button.appendTo(self.$buttons);
- }
- }
- });
-
-
- var number_fields = [];
-
- // 增加参数控制app_show_search_number
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_show_search_number']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.columns, function (value, key, list) {
- if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) {
- number_fields.push([value.name, value.string]);
- }
- });
-
- if (number_fields.length == 0) {
- if (self.fields_range) {
- number_fields = self.fields_range;
- }
- }
- if (number_fields.length > 0) {
- self.$search_range = $(QWeb.render('odooApp.SearchRange', {'number_fields': number_fields}))
- // self.$search_range.find('.app_search_date_range').click(function() {
- // self.tgl_search();
- // });
- self.$search_range.find('.app_select_range_field').on('change', function () {
- self.tgl_search();
- });
- self.$search_range.find('.app_start_range').on('change', function () {
- self.tgl_search();
- });
- self.$search_range.find('.app_end_range').on('change', function () {
- self.tgl_search();
- });
- self.$search_range.appendTo(self.$buttons);
- }
- }
- });
-
- // Dropdown list
- _.each(this.ts_context, function(item){
- var field = _.find(self.columns, function(column){
- return column.type == 'many2one' && column.relation && column.name === item.name;
- });
- if (field) {
- self.ts_fields.push(item.name);
- new Model(field.relation).query(['id', 'display_name']).filter(new data.CompoundDomain(item.domain, field.domain)).context(new data.CompoundContext()).all().then(function (result) {
- // var single_search = $(QWeb.render('odooApp.selection', {
- // 'string': item.string,
- // 'class_name': 'app_item_' + item.name,
- // 'fields': result,
- // }));
- if (!$('.after_control_panel').length) {
- // $(QWeb.render('odooApp.after_control_panel', {})).appendTo($('.o_control_panel'));
- // $(QWeb.render('odooApp.after_control_panel', {})).appendTo($('.o_cp_left'));
-
- // $(QWeb.render('odooApp.after_control_panel', {})).appendTo(self.$buttons);
-
- var multi_search = $(QWeb.render("TGL.TreeSearch.Item", {'widget': {
- 'string': item.string,
- 'key': item.name,
- 'class_name': 'app_multi_item_' + item.name,
- 'fields': result,
- }}))
-
- multi_search.find('li').click(self.on_button_click.bind(self));
- multi_search.appendTo(self.$buttons);
- }
- // single_search.appendTo($('.after_control_panel'));
- // $('.app_item_' + item.name).on('change', function() {
- // self.tgl_search();
- // })
- });
- }
- });
-
-
- },
-
- do_search: function(domain, context, group_by) {
- var self = this;
- this.last_domain = domain;
- this.last_context = context;
- this.last_group_by = group_by;
- this.old_search = _.bind(this._super, this);
- return self.tgl_search();
- },
-
- tgl_search: function() {
- var self = this;
- var domain = [], value, value_tmp;
-
- _.each(self.ts_fields, function(field){
- value = $('.app_item_' + field).val();
-
- var select_fields = $('.app_multi_item_' + field).children('.selected'),
- select_value = [];
- if (select_fields.length > 0) {
- _.each(select_fields, function(item){
- value_tmp = $(item).data('field');
- if (value_tmp > 0) {
- select_value.push($(item).data('field'));
- }
- });
- if (select_value.length) {
- domain.push([field, 'in', select_value]);
- }
-
- }
- });
-// 注意,date和datetime型的处理是不同的,已处理完
- if (self.$search_button) {
- var start_date = self.$search_button.find('.app_start_date').val(),
- end_date = self.$search_button.find('.app_end_date').val(),
- field = self.$search_button.find('.app_select_field').val(),
- field_type = 'datetime';
- var tz = session.user_context.tz,
- start_utc,
- end_utc;
-
- _.each(self.columns, function (value, key, list) {
- if (value.name == field) {
- field_type = value.type;
- return false;
- }
- });
-
- moment.locale(tz);
- var l10n = _t.database.parameters;
- if (start_date) {
- if (field_type === 'date') {
- //日期类型,无须utc处理
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '>=', start_date]);
- } else {
- //日期时间,处理utc
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- start_utc = moment(start_date)
- domain.push([field, '>=', start_utc]);
- }
- }
- if (end_date) {
- if (field_type === 'date') {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '<=', end_date]);
- } else {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- end_utc = moment(end_date)
- domain.push([field, '<=', end_utc]);
- }
- }
- }
-
- if (self.$search_range) {
- var start_range = self.$search_range.find('.app_start_range').val(),
- end_range = self.$search_range.find('.app_end_range').val(),
- range_field = self.$search_range.find('.app_select_range_field').val();
-
- if (start_range) {
- domain.push([range_field, '>=', parseInt(start_range)]);
- }
- if (end_range) {
- domain.push([range_field, '<=', parseInt(end_range)]);
- }
- }
- // console.log(domain);
- var compound_domain = new data.CompoundDomain(self.last_domain, domain);
- self.dataset.domain = compound_domain.eval();
- return self.old_search(compound_domain, self.last_context, self.last_group_by);
- },
-
-});
-
-});
\ No newline at end of file
diff --git a/app_search_range/static/src/xml/pivot_view.xml b/app_search_range/static/src/xml/pivot_view.xml
deleted file mode 100644
index 4ba3d0c3..00000000
--- a/app_search_range/static/src/xml/pivot_view.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_search_range/views/template_view.xml b/app_search_range/views/template_view.xml
deleted file mode 100644
index b6cc479d..00000000
--- a/app_search_range/views/template_view.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_ui_enhance/__init__.py b/app_ui_enhance/__init__.py
deleted file mode 100644
index 0f7cb6b2..00000000
--- a/app_ui_enhance/__init__.py
+++ /dev/null
@@ -1,2 +0,0 @@
-# -*- coding: utf-8 -*-
-import models
\ No newline at end of file
diff --git a/app_ui_enhance/__openerp__.py b/app_ui_enhance/__openerp__.py
deleted file mode 100644
index 9e3f5537..00000000
--- a/app_ui_enhance/__openerp__.py
+++ /dev/null
@@ -1,76 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-{
- 'name': 'App Web UI Enhance(Search by date or number range,List background color,Barcode Setting.)',
- 'version': '10.0.1.0',
- 'category': 'web',
- 'author': 'Sunpop.cn',
- 'website': 'http://www.sunpop.cn',
- 'license': 'AGPL-3',
- 'sequence': 2,
- 'summary': """
- UI Enhance for Odoo.
- 1.Search by date or number range in List view and Pivot view.
- 2.Instructions for Activating List background color property.
- 3.Reset the barcode format.
- 4.Draggable Dialog
- """,
- 'description': """
-
-1.Search by date or number range in List view and Pivot view
---------------------------------------------------
-2.Instructions for Activating List background color property
-
-Just add tree attribute like style and colors with condition you want.
-
-bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')"
-
-
-eg.
-
-
- demo.tree
- demo.model
-
-
-
-
-
-
-
---------------------------------------------------
-
- """,
- 'depends': ['web', 'report', 'app_odoo_customize'],
- 'data': [
- 'views/app_ui_config_settings_view.xml',
- 'views/template_view.xml',
- # data
- 'data/ir_config_parameter.xml',
- ],
- 'qweb': [
- 'static/src/xml/*.xml',
- ],
- "price": 68.00,
- "currency": "EUR",
-
- 'images': ['static/description/list_pivot.png'],
-
- 'installable': True,
- 'auto_install': False,
- 'application': True,
-}
diff --git a/app_ui_enhance/data/ir_config_parameter.xml b/app_ui_enhance/data/ir_config_parameter.xml
deleted file mode 100644
index cb432dd2..00000000
--- a/app_ui_enhance/data/ir_config_parameter.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
- app_ui_show_search_date
- True
-
-
- app_ui_show_search_number
- False
-
-
- app_ui_force_barcode
- Code128
-
-
-
- app_ui_allow_barcode
- QR,Standard39
-
-
-
\ No newline at end of file
diff --git a/app_ui_enhance/i18n/zh_CN.po b/app_ui_enhance/i18n/zh_CN.po
deleted file mode 100644
index 5d5c82a4..00000000
--- a/app_ui_enhance/i18n/zh_CN.po
+++ /dev/null
@@ -1,270 +0,0 @@
-# Translation of Odoo Server.
-# This file contains the translation of the following modules:
-# * app_ui_enhance
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Odoo Server 10.0+e-20171107\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2018-01-28 19:12+0000\n"
-"PO-Revision-Date: 2018-01-28 19:12+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_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:71
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:92
-#, python-format
-msgid "All"
-msgstr "全部"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_allow_barcode
-msgid "Allow Barcode, Seperated by \",\""
-msgstr "允许的条码,用\",\"分隔"
-
-#. module: app_ui_enhance
-#: model:ir.model,name:app_ui_enhance.model_app_ui_config_settings
-msgid "App Web UI enhance settings"
-msgstr "界面优化设置"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "Apply"
-msgstr "应用"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "Cancel"
-msgstr "取消"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Codabar"
-msgstr "Codabar"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Code11"
-msgstr "Code11"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Code128"
-msgstr "Code128"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_create_uid
-msgid "Created by"
-msgstr "创建人"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_create_date
-msgid "Created on"
-msgstr "创建时间"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_allow_barcode
-msgid "Default Allow QR and Standard39."
-msgstr "建议默认输入 QR,Standard39"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_display_name
-msgid "Display Name"
-msgstr "显示名称"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "EAN13"
-msgstr "EAN13"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "EAN8"
-msgstr "EAN8"
-
-#. module: app_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:22
-#, python-format
-msgid "End date"
-msgstr "结束日期"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Extended39"
-msgstr "Extended39"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Extended93"
-msgstr "Extended93"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "FIM"
-msgstr "FIM"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_force_barcode
-msgid "Force all Odoo Barcode to:"
-msgstr "强制设置所有Odoo条码格式:"
-
-#. module: app_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:43
-#, python-format
-msgid "From"
-msgstr "从"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "I2of5"
-msgstr "I2of5"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_id
-msgid "ID"
-msgstr "ID"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "Item to Show"
-msgstr "显示/隐藏菜单项"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings___last_update
-msgid "Last Modified on"
-msgstr "最后修改日"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_write_uid
-msgid "Last Updated by"
-msgstr "最后更新人"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_write_date
-msgid "Last Updated on"
-msgstr "最后更新时间"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "MSI"
-msgstr "MSI"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Odoo Default"
-msgstr "Odoo 默认"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "POSTNET"
-msgstr "POSTNET"
-
-#. module: app_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:18
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:22
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:43
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:47
-#, python-format
-msgid "Press Enter to search"
-msgstr "直接按回车即可搜索"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "QR"
-msgstr "QR"
-
-#. module: app_ui_enhance
-#: model:ir.model,name:app_ui_enhance.model_report
-msgid "Report"
-msgstr "报表"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "Report Setting"
-msgstr "报表输出设置"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "Search Enhance"
-msgstr "搜索增加"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_date
-#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_number
-msgid "Set 'True' to show, Set 'False' to hide"
-msgstr "设为 'True' 则显示,设为 'False' 则隐藏"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,help:app_ui_enhance.field_app_ui_config_settings_app_ui_force_barcode
-msgid "Set Odoo Default to use the barcode odoo define in report(EAN13)."
-msgstr "设置为'Odoo默认'即使用代码中设置的条码编码(EAN13)"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_date
-msgid "Show date range search in tree/pivot view"
-msgstr "显示日期搜索,在tree/pivot视图生效"
-
-#. module: app_ui_enhance
-#: model:ir.model.fields,field_description:app_ui_enhance.field_app_ui_config_settings_app_ui_show_search_number
-msgid "Show number range search tree/pivot view"
-msgstr "显示数值搜索,在tree/pivot视图生效"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Standard39"
-msgstr "Standard39"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "Standard93"
-msgstr "Standard93"
-
-#. module: app_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:18
-#, python-format
-msgid "Start date"
-msgstr "开始日期"
-
-#. module: app_ui_enhance
-#. openerp-web
-#: code:addons/app_ui_enhance/static/src/xml/pivot_view.xml:47
-#, python-format
-msgid "To"
-msgstr "至"
-
-#. module: app_ui_enhance
-#: model:ir.actions.act_window,name:app_ui_enhance.action_app_ui_config
-#: model:ir.ui.menu,name:app_ui_enhance.menu_app_ui_config
-msgid "UI Enhance"
-msgstr "界面增强"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "UPCA"
-msgstr "UPCA"
-
-#. module: app_ui_enhance
-#: selection:app.ui.config.settings,app_ui_force_barcode:0
-msgid "USPS_4State"
-msgstr "USPS_4State"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "odoo UI Enhance"
-msgstr "odoo 界面增强"
-
-#. module: app_ui_enhance
-#: model:ir.ui.view,arch_db:app_ui_enhance.view_app_ui_config_settings
-msgid "odooApp UI Settings"
-msgstr "界面增强设置"
-
diff --git a/app_ui_enhance/models/__init__.py b/app_ui_enhance/models/__init__.py
deleted file mode 100644
index 748f84fd..00000000
--- a/app_ui_enhance/models/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-import app_ui_config_settings
-import report
diff --git a/app_ui_enhance/models/app_ui_config_settings.py b/app_ui_enhance/models/app_ui_config_settings.py
deleted file mode 100644
index 3a4bede4..00000000
--- a/app_ui_enhance/models/app_ui_config_settings.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-16
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-import logging
-
-from openerp import api, fields, models, _
-
-_logger = logging.getLogger(__name__)
-
-
-class AppUiConfigSettings(models.TransientModel):
- _inherit = 'res.config.settings'
- _name = 'app.ui.config.settings'
-
- _description = u"App Web UI enhance settings"
- app_ui_show_search_date = fields.Boolean('Show date range search in tree/pivot view', help=u"Set 'True' to show, Set 'False' to hide")
- app_ui_show_search_number = fields.Boolean('Show number range search tree/pivot view', help=u"Set 'True' to show, Set 'False' to hide")
-
- """Contoller able to render barcode images thanks to reportlab.
- Samples:
-
-
-
- :param type: Accepted types: 'Codabar', 'Code11', 'Code128', 'EAN13', 'EAN8', 'Extended39',
- 'Extended93', 'FIM', 'I2of5', 'MSI', 'POSTNET', 'QR', 'Standard39', 'Standard93',
- 'UPCA', 'USPS_4State'
- :param humanreadable: Accepted values: 0 (default) or 1. 1 will insert the readable value
- at the bottom of the output image
- """
-
- app_ui_force_barcode = fields.Selection([
- ('Default', 'Odoo Default'),
- ('Code128', 'Code128'),
- ('Standard39', 'Standard39'),
- ('EAN13', 'EAN13'),
- ('QR', 'QR'),
- ('Codabar', 'Codabar'),
- ('Code11', 'Code11'),
- ('Extended39', 'Extended39'),
- ('EAN8', 'EAN8'),
- ('Extended93', 'Extended93'),
- ('FIM', 'FIM'),
- ('I2of5', 'I2of5'),
- ('MSI', 'MSI'),
- ('POSTNET', 'POSTNET'),
- ('Standard93', 'Standard93'),
- ('UPCA', 'UPCA'),
- ('USPS_4State', 'USPS_4State'),
- ], string='Force all Odoo Barcode to:', help=u"Set Odoo Default to use the barcode odoo define in report(EAN13).")
-
- app_ui_allow_barcode = fields.Char('Allow Barcode, Seperated by ","', help=u"Default Allow QR and Standard39.")
-
- @api.model
- def get_default_all(self, fields):
- ir_config = self.env['ir.config_parameter']
- app_ui_show_search_date = True if ir_config.get_param('app_ui_show_search_date') == "True" else False
- app_ui_show_search_number = True if ir_config.get_param('app_ui_show_search_number') == "True" else False
- app_ui_force_barcode = ir_config.get_param('app_ui_force_barcode')
- app_ui_allow_barcode = ir_config.get_param('app_ui_allow_barcode')
-
- return dict(
- app_ui_show_search_date=app_ui_show_search_date,
- app_ui_show_search_number=app_ui_show_search_number,
- app_ui_force_barcode=app_ui_force_barcode,
- app_ui_allow_barcode=app_ui_allow_barcode
- )
-
- @api.multi
- def set_default_all(self):
- self.ensure_one()
- ir_config = self.env['ir.config_parameter']
- ir_config.set_param("app_ui_show_search_date", self.app_ui_show_search_date or "False")
- ir_config.set_param("app_ui_show_search_number", self.app_ui_show_search_number or "False")
- ir_config.set_param("app_ui_force_barcode", self.app_ui_force_barcode or "Default")
- ir_config.set_param("app_ui_allow_barcode", self.app_ui_allow_barcode or "")
- return True
diff --git a/app_ui_enhance/models/report.py b/app_ui_enhance/models/report.py
deleted file mode 100644
index d7082d88..00000000
--- a/app_ui_enhance/models/report.py
+++ /dev/null
@@ -1,35 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from odoo import api, models, fields, _
-from odoo.addons import decimal_precision as dp
-from odoo.exceptions import UserError, ValidationError
-
-class Report(models.Model):
- _inherit = 'report'
-
- """Contoller able to render barcode images thanks to reportlab.
- Samples:
-
-
-
- :param type: Accepted types: 'Codabar', 'Code11', 'Code128', 'EAN13', 'EAN8', 'Extended39',
- 'Extended93', 'FIM', 'I2of5', 'MSI', 'POSTNET', 'QR', 'Standard39', 'Standard93',
- 'UPCA', 'USPS_4State'
- :param humanreadable: Accepted values: 0 (default) or 1. 1 will insert the readable value
- at the bottom of the output image
- """
-
- def barcode(self, barcode_type, value, width=600, height=100, humanreadable=0):
- ir_config = self.env['ir.config_parameter']
- app_ui_force_barcode = ir_config.get_param('app_ui_force_barcode', default='Default')
- app_ui_allow_barcode = ir_config.get_param('app_ui_allow_barcode', default='')
- allow = app_ui_allow_barcode.strip(',').split(',')
- allowtype = tuple(allow)
- if not app_ui_force_barcode or app_ui_force_barcode == 'Default':
- return super(Report, self).barcode(barcode_type, value, width, height, humanreadable)
- # 在允许的例外列表内
- elif barcode_type in allowtype:
- return super(Report, self).barcode(barcode_type, value, width, height, humanreadable)
- else:
- return super(Report, self).barcode(app_ui_force_barcode, value, width, height, humanreadable)
diff --git a/app_ui_enhance/static/description/date_range.jpg b/app_ui_enhance/static/description/date_range.jpg
deleted file mode 100644
index 8b702b90..00000000
Binary files a/app_ui_enhance/static/description/date_range.jpg and /dev/null differ
diff --git a/app_ui_enhance/static/description/date_range.png b/app_ui_enhance/static/description/date_range.png
deleted file mode 100644
index 317099b9..00000000
Binary files a/app_ui_enhance/static/description/date_range.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/icon.png b/app_ui_enhance/static/description/icon.png
deleted file mode 100644
index 4c57f611..00000000
Binary files a/app_ui_enhance/static/description/icon.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/index.html b/app_ui_enhance/static/description/index.html
deleted file mode 100644
index b5f35b0a..00000000
--- a/app_ui_enhance/static/description/index.html
+++ /dev/null
@@ -1,137 +0,0 @@
-
-
-
-
App Search By Date or Number Range
-
-
-
This moduld allows user to Search by date or number range in List view and Pivot view.
-
-
- 1.List all the date/datetime field to select range
- 2.List all the integer/float/Monetary field to select range
- 3.Auto get user timezone, global Timezone supported.
- 4.Easy admin to enable/disable the search.
-
-
-
- 5.Instructions for Activating List background color property.
- 6.Reset the barcode format.
-
-
-
-
-
-
-
-
Date range
-
-
-
-
-
-
-
-
-
Value range
-
-
-
-
-
-
-
-
-
Pivot View
-
-
-
-
-
-
-
-
-
How to setup
-
-
There are 2 way to setup
-
1.Go to Menu: Settings->odooApp->UI Enhance
-
Setup what you need
-
-
-
-
2. Go to Menu: Settings->Technical->Parameters->System Parameters
-
You can find "app_ui_show_search_date" and "app_ui_show_search_number"
-
Go to Menu: Settings->Technical->Parameters->System Parameters.
-
Set the Value to "False" if you do not want to show the search. And set "True" to show.
-
-
-
-
-
-
-
-
-
Web list View Background Color
-
-
This module changes the line color of records based on condition like state of a record and helps distinguish between different sets of
- records based on condition.
-
-
- Set Backgroud color to filed in list view based on condition same as colors and style attributes of tree view.
-
-
# Instructions for Activating List background color property
-
- Just add tree attribute like style and colors with condition you want.
-
-
bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')"
-
eg.
-
- <record id="view_demo_tree" model="ir.ui.view">
- <field name="name">demo.tree</field>
- <field name="model">demo.model</field>
- <field name="arch" type="xml">
- <tree bg_colors="grey:state=='cancel';green:state=='draft';blue:state in ('done');red:state in ('waiting')" name="demo_tree">
- <field name="name" string="Appointment" />
- <field name="state" />
- </tree>
- </field>
- </record>
-
-
-
-
-
-
-
-
-
-
Technical Help & Support
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_ui_enhance/static/description/list_pivot.jpg b/app_ui_enhance/static/description/list_pivot.jpg
deleted file mode 100644
index 6b9ff4e8..00000000
Binary files a/app_ui_enhance/static/description/list_pivot.jpg and /dev/null differ
diff --git a/app_ui_enhance/static/description/list_pivot.png b/app_ui_enhance/static/description/list_pivot.png
deleted file mode 100644
index 59bf05cd..00000000
Binary files a/app_ui_enhance/static/description/list_pivot.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/odoo_web_tree_bg_color.png b/app_ui_enhance/static/description/odoo_web_tree_bg_color.png
deleted file mode 100644
index 6101c90a..00000000
Binary files a/app_ui_enhance/static/description/odoo_web_tree_bg_color.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/setup.png b/app_ui_enhance/static/description/setup.png
deleted file mode 100644
index 0c79efd6..00000000
Binary files a/app_ui_enhance/static/description/setup.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/setup1.jpg b/app_ui_enhance/static/description/setup1.jpg
deleted file mode 100644
index c2f5c09f..00000000
Binary files a/app_ui_enhance/static/description/setup1.jpg and /dev/null differ
diff --git a/app_ui_enhance/static/description/setup1.png b/app_ui_enhance/static/description/setup1.png
deleted file mode 100644
index e44465d4..00000000
Binary files a/app_ui_enhance/static/description/setup1.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/setup2.jpg b/app_ui_enhance/static/description/setup2.jpg
deleted file mode 100644
index dcfaaf54..00000000
Binary files a/app_ui_enhance/static/description/setup2.jpg and /dev/null differ
diff --git a/app_ui_enhance/static/description/value_range.jpg b/app_ui_enhance/static/description/value_range.jpg
deleted file mode 100644
index 424b1369..00000000
Binary files a/app_ui_enhance/static/description/value_range.jpg and /dev/null differ
diff --git a/app_ui_enhance/static/description/value_range.png b/app_ui_enhance/static/description/value_range.png
deleted file mode 100644
index e1b33e3b..00000000
Binary files a/app_ui_enhance/static/description/value_range.png and /dev/null differ
diff --git a/app_ui_enhance/static/description/web_bg_color_change.png b/app_ui_enhance/static/description/web_bg_color_change.png
deleted file mode 100644
index cecd5f37..00000000
Binary files a/app_ui_enhance/static/description/web_bg_color_change.png and /dev/null differ
diff --git a/app_ui_enhance/static/src/css/app_report_enhance.css b/app_ui_enhance/static/src/css/app_report_enhance.css
deleted file mode 100644
index 8d69b38c..00000000
--- a/app_ui_enhance/static/src/css/app_report_enhance.css
+++ /dev/null
@@ -1,10 +0,0 @@
-/* report更紧凑,无边框 */
-.table-tight td {
- padding: 2px !important;
- border-top: 0px !important;
-}
-.table-tight > thead > tr > th, .table-tight > tbody > tr > th, .table-tight > tfoot > tr > th,
-.table-tight > thead > tr > td, .table-tight > tbody > tr > td, .table-tight > tfoot > tr > td{
- padding: 2px !important;
- border-top: 0px !important;
-}
\ No newline at end of file
diff --git a/app_ui_enhance/static/src/css/app_ui_enhance.css b/app_ui_enhance/static/src/css/app_ui_enhance.css
deleted file mode 100644
index 929a62b0..00000000
--- a/app_ui_enhance/static/src/css/app_ui_enhance.css
+++ /dev/null
@@ -1,71 +0,0 @@
-.tree_search_item {
- cursor: pointer;
-}
-
-.tree_search_item .selected a:before {
- font-family: FontAwesome;
- position: absolute;
- left: 6px;
- top: 3px;
- content: "";
-}
-
-/*
-list标头不换行
-*/
-.table-responsive {
- white-space: nowrap !important;
-}
-
-/*
-sheet全宽
-*/
-.o_form_view .o_form_sheet_bg .o_form_sheet {
- max-width: 98% !important;
-}
-
-/*
-强制表格滚动,企业版/社区版中生效
-*/
-
-.force_scroll .table-responsive {
- white-space: nowrap !important;
- overflow: hidden !important;
- overflow-x: auto !important;
-}
-
-.force_scroll ::-webkit-scrollbar {
- height: 16px !important;
-}
-
-/* 滚动条的滑轨背景颜色 */
-.force_scroll ::-webkit-scrollbar-track {
- background-color: lightgrey !important;
- -webkit-border-radius: 2em !important;
- -moz-border-radius: 2em !important;
- border-radius: 2em !important;
-}
-
-/* 滑块颜色 */
-.force_scroll ::-webkit-scrollbar-thumb {
- background-color: #666666 !important;
- -webkit-border-radius: 2em !important;
- -moz-border-radius: 2em !important;
- border-radius: 2em !important;
-}
-
-/* 横向滚动条和纵向滚动条相交处尖角的颜色 */
-.force_scroll ::-webkit-scrollbar-corner {
- background-color: black;
-}
-
-/* report更紧凑,无边框 */
-.table-tight td {
- padding: 2px !important;
- border-top: 0px !important;
-}
-.table-tight > thead > tr > th, .table-tight > tbody > tr > th, .table-tight > tfoot > tr > th,
-.table-tight > thead > tr > td, .table-tight > tbody > tr > td, .table-tight > tfoot > tr > td{
- padding: 2px !important;
- border-top: 0px !important;
-}
\ No newline at end of file
diff --git a/app_ui_enhance/static/src/css/app_web_enhance.css b/app_ui_enhance/static/src/css/app_web_enhance.css
deleted file mode 100644
index 05039982..00000000
--- a/app_ui_enhance/static/src/css/app_web_enhance.css
+++ /dev/null
@@ -1,60 +0,0 @@
-.tree_search_item {
- cursor: pointer;
-}
-
-.tree_search_item .selected a:before {
- font-family: FontAwesome;
- position: absolute;
- left: 6px;
- top: 3px;
- content: "";
-}
-
-/*
-list标头不换行
-*/
-.table-responsive {
- white-space: nowrap !important;
-}
-
-/*
-sheet全宽
-*/
-.o_form_view .o_form_sheet_bg .o_form_sheet {
- max-width: 98% !important;
-}
-
-/*
-强制表格滚动,企业版/社区版中生效
-*/
-
-.force_scroll .table-responsive {
- white-space: nowrap !important;
- overflow: hidden !important;
- overflow-x: auto !important;
-}
-
-.force_scroll ::-webkit-scrollbar {
- height: 16px !important;
-}
-
-/* 滚动条的滑轨背景颜色 */
-.force_scroll ::-webkit-scrollbar-track {
- background-color: lightgrey !important;
- -webkit-border-radius: 2em !important;
- -moz-border-radius: 2em !important;
- border-radius: 2em !important;
-}
-
-/* 滑块颜色 */
-.force_scroll ::-webkit-scrollbar-thumb {
- background-color: #666666 !important;
- -webkit-border-radius: 2em !important;
- -moz-border-radius: 2em !important;
- border-radius: 2em !important;
-}
-
-/* 横向滚动条和纵向滚动条相交处尖角的颜色 */
-.force_scroll ::-webkit-scrollbar-corner {
- background-color: black;
-}
\ No newline at end of file
diff --git a/app_ui_enhance/static/src/css/web_list_bg_color.css b/app_ui_enhance/static/src/css/web_list_bg_color.css
deleted file mode 100644
index 2afb2614..00000000
--- a/app_ui_enhance/static/src/css/web_list_bg_color.css
+++ /dev/null
@@ -1,7 +0,0 @@
-
-.oe_list_field_bg_color div{
- display: inline-block;
- height: 100%;
- position: relative;
- width: 100%;
-}
diff --git a/app_ui_enhance/static/src/js/pivot.js b/app_ui_enhance/static/src/js/pivot.js
deleted file mode 100644
index f98ce534..00000000
--- a/app_ui_enhance/static/src/js/pivot.js
+++ /dev/null
@@ -1,261 +0,0 @@
-odoo.define('app_ui_enhance.pivot', function (require) {
-"use strict";
-
-var time = require('web.time');
-var core = require('web.core');
-var data = require('web.data');
-var session = require('web.session');
-var utils = require('web.utils');
-var Model = require('web.Model');
-var PivotView = require('web.PivotView');
-var datepicker = require('web.datepicker');
-
-var _t = core._t;
-var _lt = core._lt;
-var QWeb = core.qweb;
-
-PivotView.include({
-
- init: function() {
- this._super.apply(this, arguments);
- this.ts_fields = [];
- },
-
- tgl_on_button_click: function (event) {
- var self = this;
- var $target = $(event.target),
- field, key, first_item;
-
- field = $target.parent().data('field');
- key = $target.parent().data('key');
-
- if (field == -1) {
- first_item = $target.parent().parent().children('.tgl_first_item.selected');
- if (!first_item.length) {
- $target.parent().parent().children('li').removeClass('selected')
- }
- } else {
- first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected');
- }
-
- $target.parent().toggleClass('selected');
- this.tgl_search()
- event.stopPropagation();
-
- },
-
-
- render_buttons: function($node) {
- var self = this;
- var ts_context = this.context.tree_search;
-
- this._super.apply(this, arguments);
-
- var l10n = _t.database.parameters;
- var datepickers_options = {
- pickTime: false,
- startDate: moment({ y: 1900 }),
- endDate: moment().add(200, "y"),
- calendarWeeks: true,
- icons : {
- time: 'fa fa-clock-o',
- date: 'fa fa-calendar',
- up: 'fa fa-chevron-up',
- down: 'fa fa-chevron-down'
- },
- language : moment.locale(),
- format : time.strftime_to_moment_format(l10n.date_format),
- }
-
- $(QWeb.render("odooApp.TreeSearch.Placeholder", {})).appendTo($node);
-
- var date_fields = [];
- // 增加参数控制app_ui_show_search_date
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_date']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.fields, function (value, key, list) {
- if (value.store && value.type === "datetime" || value.type === "date") {
- date_fields.push([key, value.string]);
- }
- });
-
- if (date_fields.length > 0) {
- self.$search_date = $(QWeb.render('odooApp.SearchDate', {'date_fields': date_fields}))
- self.$search_date.find('.app_start_date').datetimepicker(datepickers_options);
- self.$search_date.find('.app_end_date').datetimepicker(datepickers_options);
-
- self.$search_date.find('.app_start_date').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_date.find('.app_end_date').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_date.appendTo($('.o_cp_buttons'));
- self.set_search_btn(1);
- }
- }
- });
-
- var number_fields = [];
-
- // 增加参数控制app_ui_show_search_number
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_number']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- number_fields = [];
- _.each(self.fields, function (value, key, list) {
- if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) {
- number_fields.push([key, value.string]);
- }
- });
-
- if (number_fields.length > 0) {
- self.$search_number = $(QWeb.render('odooApp.SearchNumber', {'number_fields': number_fields}))
-
- self.$search_number.find('.app_start_number').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_number.find('.app_end_number').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_number.appendTo($('.o_cp_buttons'));
- self.set_search_btn(1);
- }
- }
- });
-
- //显示搜索键,因为pivot特殊,故要单独处理
- },
-
- set_search_btn: function (show) {
- var self = this;
- if (self.$search_btn) {
- self.$search_btn.remove();
- }
- if (show) {
- self.$search_btn = $(QWeb.render("odooApp.odooapp-btn", {})).appendTo($('.o_cp_buttons'));
- self.$search_btn.children('.odooapp-search-btn').on('click', function () {
- self.tgl_search();
- });
- self.$search_btn.children('.odooapp-clear-btn').on('click', function () {
- self.do_clear();
- });
- }
- },
-
- do_search: function(domain, context, group_by) {
- var self = this;
- this.last_domain = domain;
- this.last_context = context;
- this.last_group_by = group_by;
- this.old_search = _.bind(this._super, this);
- return self.tgl_search();
- },
-
- do_keypress: function(e) {
- var self = this;
- var keynum = window.event ? e.keyCode : e.which;
- if (keynum==13)
- return self.tgl_search();
- },
-
- do_clear: function() {
- var self = this;
- if (self.$search_date) {
- self.$search_date.find('.app_start_date').val('');
- self.$search_date.find('.app_end_date').val('');
- }
- if (self.$search_number) {
- self.$search_number.find('.app_start_number').val('');
- self.$search_number.find('.app_end_number').val('');
- }
- return self.tgl_search();
- },
-
- tgl_search: function() {
- var self = this;
- var domain = [], value, value_tmp;
-
- _.each(self.ts_fields, function(field){
- value = $('.app_item_' + field).val();
-
- var select_fields = $('.app_multi_item_' + field).children('.selected'),
- select_value = [];
- if (select_fields.length > 0) {
- _.each(select_fields, function(item){
- value_tmp = $(item).data('field');
- if (value_tmp > 0) {
- select_value.push($(item).data('field'));
- }
- });
- if (select_value.length) {
- domain.push([field, 'in', select_value]);
- }
-
- }
- });
-
-// 注意,date和datetime型的处理是不同的,已处理完
- if (self.$search_date) {
- var start_date = self.$search_date.find('.app_start_date').val(),
- end_date = self.$search_date.find('.app_end_date').val(),
- field = self.$search_date.find('.app_select_field').val(),
- field_type = 'datetime';
- var tz = session.user_context.tz,
- start_utc,
- end_utc;
-
- _.each(self.columns, function (value, key, list) {
- if (value.name == field) {
- field_type = value.type;
- return false;
- }
- });
-
- moment.locale(tz);
- var l10n = _t.database.parameters;
- if (start_date) {
- if (field_type == 'date') {
- //日期类型,无须utc处理
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '>=', start_date]);
- } else {
- //日期时间,处理utc
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- start_utc = moment(start_date)
- domain.push([field, '>=', start_utc]);
- }
- }
- if (end_date) {
- if (field_type == 'date') {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '<=', end_date]);
- } else {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- end_utc = moment(end_date)
- domain.push([field, '<=', end_utc]);
- }
- }
- }
-
- if (self.$search_number) {
- var start_range = self.$search_number.find('.app_start_number').val(),
- end_range = self.$search_number.find('.app_end_number').val(),
- range_field = self.$search_number.find('.app_select_range_field').val();
-
- if (start_range) {
- domain.push([range_field, '>=', parseInt(start_range)]);
- }
- if (end_range) {
- domain.push([range_field, '<=', parseInt(end_range)]);
- }
- }
- // console.log(domain);
- var compound_domain = new data.CompoundDomain(self.last_domain, domain);
- self.dataset.domain = compound_domain.eval();
- return self.old_search(compound_domain, self.last_context, self.last_group_by);
- },
-
-
-});
-
-});
\ No newline at end of file
diff --git a/app_ui_enhance/static/src/js/tree.js b/app_ui_enhance/static/src/js/tree.js
deleted file mode 100644
index ce587996..00000000
--- a/app_ui_enhance/static/src/js/tree.js
+++ /dev/null
@@ -1,260 +0,0 @@
-odoo.define('app_ui_enhance.tree', function (require) {
-"use strict";
-
-var time = require('web.time');
-var core = require('web.core');
-var data = require('web.data');
-var session = require('web.session');
-var utils = require('web.utils');
-var Model = require('web.Model');
-var ListView = require('web.ListView');
-var datepicker = require('web.datepicker');
-var ViewManager = require('web.ViewManager')
-var _t = core._t;
-var _lt = core._lt;
-var QWeb = core.qweb;
-
-ListView.include({
-
- init: function(parent, dataset, view_id, options) {
- this._super.apply(this, arguments);
- this.ts_context = dataset.context.tree_search;
- this.fields_range = dataset.context.fields_range;
- this.ts_fields = [];
- },
-
- on_button_click: function (event) {
- var self = this;
- var $target = $(event.target),
- field, key, first_item;
-
- field = $target.parent().data('field');
- key = $target.parent().data('key');
-
- if (field == -1) {
- first_item = $target.parent().parent().children('.tgl_first_item.selected');
- if (!first_item.length) {
- $target.parent().parent().children('li').removeClass('selected')
- }
- } else {
- first_item = $target.parent().parent().children('.tgl_first_item').removeClass('selected');
- }
-
- $target.parent().toggleClass('selected');
- this.tgl_search()
- event.stopPropagation();
-
- },
-
- render_buttons: function($node) {
- var self = this;
- this._super.apply(this, arguments);
-
- var l10n = _t.database.parameters;
- var datepickers_options = {
- pickTime: false,
- startDate: moment({ y: 1900 }),
- endDate: moment().add(200, "y"),
- calendarWeeks: true,
- icons : {
- time: 'fa fa-clock-o',
- date: 'fa fa-calendar',
- up: 'fa fa-chevron-up',
- down: 'fa fa-chevron-down'
- },
- language : moment.locale(),
- format : time.strftime_to_moment_format(l10n.date_format),
- }
-
- self.$buttons.find('.app-search').remove();
-
- var date_fields = [];
- // 增加参数控制app_ui_show_search_date
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_date']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.columns, function (value, key, list) {
- if (value.store && value.type === "datetime" || value.type === "date") {
- date_fields.push([value.name, value.string, value.type]);
- }
- });
- if (date_fields.length > 0) {
- self.$search_date = $(QWeb.render('odooApp.SearchDate', {'date_fields': date_fields}))
- self.$search_date.find('.app_start_date').datetimepicker(datepickers_options);
- self.$search_date.find('.app_end_date').datetimepicker(datepickers_options);
-
- self.$search_date.find('.app_start_date').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_date.find('.app_end_date').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_date.appendTo(self.$buttons);
- self.set_search_btn(1);
- }
- }
- });
-
-
- var number_fields = [];
-
- // 增加参数控制app_ui_show_search_number
- new Model('ir.config_parameter').call('search_read', [[['key', '=', 'app_ui_show_search_number']], ['value']]).then(function (show) {
- if (show.length >= 1 && (show[0]['value'] == "True")) {
- _.each(self.columns, function (value, key, list) {
- if (value.string && value.string.length > 1 && value.store && (value.type === "integer" || value.type === "float" || value.type === "monetary")) {
- number_fields.push([value.name, value.string]);
- }
- });
-
- if (number_fields.length == 0) {
- if (self.fields_range) {
- number_fields = self.fields_range;
- }
- }
- if (number_fields.length > 0) {
- self.$search_number = $(QWeb.render('odooApp.SearchNumber', {'number_fields': number_fields}))
-
- self.$search_number.find('.app_start_number').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_number.find('.app_end_number').on('keypress', function (e) {
- self.do_keypress(e);
- });
- self.$search_number.appendTo(self.$buttons);
- self.set_search_btn(1);
- }
- }
- });
- },
-
- set_search_btn: function (show) {
- var self = this;
- if (self.$search_btn) {
- self.$search_btn.remove();
- }
- if (show) {
- self.$search_btn = $(QWeb.render("odooApp.odooapp-btn", {})).appendTo(self.$buttons);
- self.$search_btn.children('.odooapp-search-btn').on('click', function () {
- self.tgl_search();
- });
- self.$search_btn.children('.odooapp-clear-btn').on('click', function () {
- self.do_clear();
- });
- }
- },
-
- do_search: function(domain, context, group_by) {
- var self = this;
- this.last_domain = domain;
- this.last_context = context;
- this.last_group_by = group_by;
- this.old_search = _.bind(this._super, this);
- return self.tgl_search();
- },
-
- do_keypress: function(e) {
- var self = this;
- var keynum = window.event ? e.keyCode : e.which;
- if (keynum==13)
- return self.tgl_search();
- },
-
- do_clear: function() {
- var self = this;
- if (self.$search_date) {
- self.$search_date.find('.app_start_date').val('');
- self.$search_date.find('.app_end_date').val('');
- }
- if (self.$search_number) {
- self.$search_number.find('.app_start_number').val('');
- self.$search_number.find('.app_end_number').val('');
- }
- return self.tgl_search();
- },
-
- tgl_search: function() {
- var self = this;
- var domain = [], value, value_tmp;
-
- _.each(self.ts_fields, function(field){
- value = $('.app_item_' + field).val();
-
- var select_fields = $('.app_multi_item_' + field).children('.selected'),
- select_value = [];
- if (select_fields.length > 0) {
- _.each(select_fields, function(item){
- value_tmp = $(item).data('field');
- if (value_tmp > 0) {
- select_value.push($(item).data('field'));
- }
- });
- if (select_value.length) {
- domain.push([field, 'in', select_value]);
- }
-
- }
- });
-// 注意,date和datetime型的处理是不同的,已处理完
- if (self.$search_date) {
- var start_date = self.$search_date.find('.app_start_date').val(),
- end_date = self.$search_date.find('.app_end_date').val(),
- field = self.$search_date.find('.app_select_field').val(),
- field_type = 'datetime';
- var tz = session.user_context.tz,
- start_utc,
- end_utc;
-
- _.each(self.columns, function (value, key, list) {
- if (value.name == field) {
- field_type = value.type;
- return false;
- }
- });
-
- moment.locale(tz);
- var l10n = _t.database.parameters;
- if (start_date) {
- if (field_type === 'date') {
- //日期类型,无须utc处理
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '>=', start_date]);
- } else {
- //日期时间,处理utc
- start_date = moment(moment(start_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- start_utc = moment(start_date)
- domain.push([field, '>=', start_utc]);
- }
- }
- if (end_date) {
- if (field_type === 'date') {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD');
- domain.push([field, '<=', end_date]);
- } else {
- end_date = moment(moment(end_date, time.strftime_to_moment_format(l10n.date_format))).format('YYYY-MM-DD 00:00:00');
- end_utc = moment(end_date)
- domain.push([field, '<=', end_utc]);
- }
- }
- }
-
- if (self.$search_number) {
- var start_range = self.$search_number.find('.app_start_number').val(),
- end_range = self.$search_number.find('.app_end_number').val(),
- range_field = self.$search_number.find('.app_select_range_field').val();
-
- if (start_range) {
- domain.push([range_field, '>=', parseInt(start_range)]);
- }
- if (end_range) {
- domain.push([range_field, '<=', parseInt(end_range)]);
- }
- }
- // console.log(domain);
- var compound_domain = new data.CompoundDomain(self.last_domain, domain);
- self.dataset.domain = compound_domain.eval();
- return self.old_search(compound_domain, self.last_context, self.last_group_by);
- },
-
-});
-
-});
\ No newline at end of file
diff --git a/app_ui_enhance/static/src/js/web_draggable_dialog.js b/app_ui_enhance/static/src/js/web_draggable_dialog.js
deleted file mode 100644
index ae191708..00000000
--- a/app_ui_enhance/static/src/js/web_draggable_dialog.js
+++ /dev/null
@@ -1,17 +0,0 @@
-odoo.define('app_ui_enhance.web_draggable_dialog', function (require) {
-'use strict';
-
- var Dialog = require('web.Dialog');
-
- Dialog.include({
- open: function () {
- this._super.apply(this, arguments);
- this._opened.done(function(){
- $(".modal.in").draggable({
- handle: ".modal-header"
- });
- });
- return this;
- },
- });
-});
diff --git a/app_ui_enhance/static/src/js/web_list_bg_color.js b/app_ui_enhance/static/src/js/web_list_bg_color.js
deleted file mode 100644
index 0778f211..00000000
--- a/app_ui_enhance/static/src/js/web_list_bg_color.js
+++ /dev/null
@@ -1,57 +0,0 @@
-odoo.define('app_ui_enhance.list_bg_color', function (require) {
-"use strict";
-
-var core = require('web.core');
-var common = require('web.form_common');
-var Model = require('web.Model');
-var time = require('web.time');
-var ListView = require('web.ListView');
-var session = require('web.session');
-var compatibility = require('web.compatibility');
-
- ListView.include({
- willStart: function() {
- if (this.fields_view.arch.attrs.bg_colors) {
- this.bg_colors = _(this.fields_view.arch.attrs.bg_colors.split(';')).chain()
- .compact()
- .map(function(color_pair) {
- var pair = color_pair.split(':'),
- color = pair[0],
- expr = pair[1];
- return [color, py.parse(py.tokenize(expr)), expr];
- }).value();
-
- if (!this.colors) { this.colors = [] }
- }
- return this._super();
- },
-
- style_for: function (record) {
- var len, style= '';
-
- var context = _.extend({}, record.attributes, {
- uid: session.uid,
- current_date: moment().format('YYYY-MM-DD')
- // TODO: time, datetime, relativedelta
- });
-
- var i;
- var pair;
- var expression;
- style = this._super(record);
-
- if (!this.bg_colors) { return style; }
- for(i=0, len=this.bg_colors.length; i
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- All
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_ui_enhance/views/app_ui_config_settings_view.xml b/app_ui_enhance/views/app_ui_config_settings_view.xml
deleted file mode 100644
index 7e9241ab..00000000
--- a/app_ui_enhance/views/app_ui_config_settings_view.xml
+++ /dev/null
@@ -1,51 +0,0 @@
-
-
-
-
- App Odoo Customize Settings
- app.ui.config.settings
-
-
-
-
-
-
- UI Enhance
- ir.actions.act_window
- app.ui.config.settings
- form
- inline
-
-
-
-
-
diff --git a/app_ui_enhance/views/template_view.xml b/app_ui_enhance/views/template_view.xml
deleted file mode 100644
index ff147b7d..00000000
--- a/app_ui_enhance/views/template_view.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_widget_extra/__init__.py b/app_widget_extra/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/app_widget_extra/__openerp__.py b/app_widget_extra/__openerp__.py
deleted file mode 100644
index 1b41543c..00000000
--- a/app_widget_extra/__openerp__.py
+++ /dev/null
@@ -1,119 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Created on 2017-11-05
-# author: 广州尚鹏,http://www.sunpop.cn
-# email: 300883@qq.com
-# resource of Sunpop
-# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-
-# Odoo在线中文用户手册(长期更新)
-# http://www.sunpop.cn/documentation/user/10.0/zh_CN/index.html
-
-# Odoo10离线中文用户手册下载
-# http://www.sunpop.cn/odoo10_user_manual_document_offline/
-# Odoo10离线开发手册下载-含python教程,jquery参考,Jinja2模板,PostgresSQL参考(odoo开发必备)
-# http://www.sunpop.cn/odoo10_developer_document_offline/
-# description:
-
-# base on 'author': "Gilvan Leal",
-# website': "https://gilvanleal.github.io/odoowidgets/",
-{
- 'name': "App widget extra(Inputmask Widget)",
- 'author': "Sunpop.cn",
- 'website': 'http://www.sunpop.cn',
- 'currency': 'EUR',
- 'price': 38,
-
- 'summary': """
- A Widget to make masks on form fields""",
-
- 'description': """
-================
-Inputmask Widget
-================
-
-Based on jquery.inputmask 3.x `Docs in GitHub
- `_.
-
-| An Inputmask Widget helps the user with the input by ensuring a predefined format.
-| This can be useful for dates, numerics, phone numbers, ...
-
-Instructions:
--------------
-
-- Just add attribute *widget="mask"* and *data-inputmask[-]=""* to ** ** on form, tree and kanban
-
- Some examples::
-
-
-
-
-
-
- Or::
-
-
-
-
-
-
- **Note:** Use *contenteditable="true"* for apply mask in others HTML tags: span, div, etc. **Improve**
-
-
-- Just add attribute *widget="mask_regex"* and *data-inputmask[-regex]=""* to ** **
-
- With the regex extension you can use any regular expression as a mask. Currently this does only input restriction. There is no further masking visualization.
-
- Example email validation::
-
-
-
-- Masking definition:
-
- :9: Numeric value
- :a: Alphabetical value
- :\*: Alphanumeric value
- :A: Alphabetical uppercasing
- :&: Alfanumeric uppercasing - (Use **&** for escape **&** in XML file)
- :#: Hexadecimal
-
-- Attributes:
-
- :mask: The mask to use.
- :repeat: Mask repeat function. Repeat the mask definition x-times.
- :greedy: Toggle to allocate as much possible or the opposite. Non-greedy repeat function.
- :placeholder: Change the mask placeholder. Default: "_"
- :autounmask: Automatically unmask the value when retrieved. Default: false.
- :removemaskonsubmit: Remove the mask before submitting the form.Default: false
- :clearmaskonlostfocus: Remove the empty mask on blur or when not empty removes the optional trailing part Default: true
- :insertmode: Toggle to insert or overwrite input. Default: true.
- :clearincomplete: Clear the incomplete input on blur.
- :alias: The alias to use.
-
-- Aliases:
-
- Some aliases found in the extensions are: email, currency, decimal, integer, date, datetime, dd/mm/yyyy, url, ip, etc.
-
- Docs:
-
- * `Date and Datetime `_
- * `Numeric `_
- * `Regex `_
- * `Phone `_
- * `Other `_""",
-
-
- # Categories can be used to filter modules in modules listing
- # Check https://github.com/odoo/odoo/blob/master/openerp/addons/base/module/module_data.xml
- # for the full list
- 'category': 'Extra Tools',
- 'version': '1.0',
-
- # any module necessary for this one to work correctly
- 'depends': ['web'],
-
- # always loaded
- "data": ['views/inputmask_templates.xml'],
- "qweb": ['static/src/xml/*.xml'],
- 'images': ['static/description/main_screenshot.png']
-}
diff --git a/app_widget_extra/static/description/icon.png b/app_widget_extra/static/description/icon.png
deleted file mode 100644
index 4c57f611..00000000
Binary files a/app_widget_extra/static/description/icon.png and /dev/null differ
diff --git a/app_widget_extra/static/description/main_screenshot.png b/app_widget_extra/static/description/main_screenshot.png
deleted file mode 100644
index ea045220..00000000
Binary files a/app_widget_extra/static/description/main_screenshot.png and /dev/null differ
diff --git a/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js b/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js
deleted file mode 100644
index 7e02a74c..00000000
--- a/app_widget_extra/static/lib/jquery.inputmask/jquery.inputmask.bundle.js
+++ /dev/null
@@ -1,2710 +0,0 @@
-/*!
-* jquery.inputmask.bundle.js
-* https://github.com/RobinHerbots/jquery.inputmask
-* Copyright (c) 2010 - 2017 Robin Herbots
-* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
-* Version: 3.3.5-34
-*/
-!function($) {
- function Inputmask(alias, options, internal) {
- return this instanceof Inputmask ? (this.el = void 0, this.events = {}, this.maskset = void 0,
- this.refreshValue = !1, void (internal !== !0 && ($.isPlainObject(alias) ? options = alias : (options = options || {},
- options.alias = alias), this.opts = $.extend(!0, {}, this.defaults, options), this.noMasksCache = options && void 0 !== options.definitions,
- this.userOptions = options || {}, this.isRTL = this.opts.numericInput, resolveAlias(this.opts.alias, options, this.opts)))) : new Inputmask(alias, options, internal);
- }
- function resolveAlias(aliasStr, options, opts) {
- var aliasDefinition = Inputmask.prototype.aliases[aliasStr];
- return aliasDefinition ? (aliasDefinition.alias && resolveAlias(aliasDefinition.alias, void 0, opts),
- $.extend(!0, opts, aliasDefinition), $.extend(!0, opts, options), !0) : (null === opts.mask && (opts.mask = aliasStr),
- !1);
- }
- function generateMaskSet(opts, nocache) {
- function generateMask(mask, metadata, opts) {
- if (null !== mask && "" !== mask) {
- if (1 === mask.length && opts.greedy === !1 && 0 !== opts.repeat && (opts.placeholder = ""),
- opts.repeat > 0 || "*" === opts.repeat || "+" === opts.repeat) {
- var repeatStart = "*" === opts.repeat ? 0 : "+" === opts.repeat ? 1 : opts.repeat;
- mask = opts.groupmarker.start + mask + opts.groupmarker.end + opts.quantifiermarker.start + repeatStart + "," + opts.repeat + opts.quantifiermarker.end;
- }
- var masksetDefinition;
- return void 0 === Inputmask.prototype.masksCache[mask] || nocache === !0 ? (masksetDefinition = {
- mask: mask,
- maskToken: Inputmask.prototype.analyseMask(mask, opts),
- validPositions: {},
- _buffer: void 0,
- buffer: void 0,
- tests: {},
- metadata: metadata,
- maskLength: void 0
- }, nocache !== !0 && (Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask] = masksetDefinition,
- masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]))) : masksetDefinition = $.extend(!0, {}, Inputmask.prototype.masksCache[opts.numericInput ? mask.split("").reverse().join("") : mask]),
- masksetDefinition;
- }
- }
- var ms;
- if ($.isFunction(opts.mask) && (opts.mask = opts.mask(opts)), $.isArray(opts.mask)) {
- if (opts.mask.length > 1) {
- opts.keepStatic = null === opts.keepStatic || opts.keepStatic;
- var altMask = opts.groupmarker.start;
- return $.each(opts.numericInput ? opts.mask.reverse() : opts.mask, function(ndx, msk) {
- altMask.length > 1 && (altMask += opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start),
- altMask += void 0 === msk.mask || $.isFunction(msk.mask) ? msk : msk.mask;
- }), altMask += opts.groupmarker.end, generateMask(altMask, opts.mask, opts);
- }
- opts.mask = opts.mask.pop();
- }
- return opts.mask && (ms = void 0 === opts.mask.mask || $.isFunction(opts.mask.mask) ? generateMask(opts.mask, opts.mask, opts) : generateMask(opts.mask.mask, opts.mask, opts)),
- ms;
- }
- function maskScope(actionObj, maskset, opts) {
- function getMaskTemplate(baseOnInput, minimalPos, includeMode) {
- minimalPos = minimalPos || 0;
- var ndxIntlzr, test, testPos, maskTemplate = [], pos = 0, lvp = getLastValidPosition();
- maxLength = void 0 !== el ? el.maxLength : void 0, maxLength === -1 && (maxLength = void 0);
- do baseOnInput === !0 && getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos],
- test = testPos.match, ndxIntlzr = testPos.locator.slice(), maskTemplate.push(includeMode === !0 ? testPos.input : includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
- test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && maskTemplate.push(includeMode === !1 ? test.nativeDef : getPlaceholder(pos, test))),
- pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || minimalPos > pos);
- return "" === maskTemplate[maskTemplate.length - 1] && maskTemplate.pop(), getMaskSet().maskLength = pos + 1,
- maskTemplate;
- }
- function getMaskSet() {
- return maskset;
- }
- function resetMaskSet(soft) {
- var maskset = getMaskSet();
- maskset.buffer = void 0, soft !== !0 && (maskset._buffer = void 0, maskset.validPositions = {},
- maskset.p = 0);
- }
- function getLastValidPosition(closestTo, strict, validPositions) {
- var before = -1, after = -1, valids = validPositions || getMaskSet().validPositions;
- void 0 === closestTo && (closestTo = -1);
- for (var posNdx in valids) {
- var psNdx = parseInt(posNdx);
- valids[psNdx] && (strict || valids[psNdx].generatedInput !== !0) && (psNdx <= closestTo && (before = psNdx),
- psNdx >= closestTo && (after = psNdx));
- }
- return before !== -1 && closestTo - before > 1 || after < closestTo ? before : after;
- }
- function stripValidPositions(start, end, nocheck, strict) {
- function IsEnclosedStatic(pos) {
- var posMatch = getMaskSet().validPositions[pos];
- if (void 0 !== posMatch && null === posMatch.match.fn) {
- var prevMatch = getMaskSet().validPositions[pos - 1], nextMatch = getMaskSet().validPositions[pos + 1];
- return void 0 !== prevMatch && void 0 !== nextMatch;
- }
- return !1;
- }
- var i, startPos = start, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), needsValidation = !1;
- for (getMaskSet().p = start, i = end - 1; i >= startPos; i--) void 0 !== getMaskSet().validPositions[i] && (nocheck !== !0 && (!getMaskSet().validPositions[i].match.optionality && IsEnclosedStatic(i) || opts.canClearPosition(getMaskSet(), i, getLastValidPosition(), strict, opts) === !1) || delete getMaskSet().validPositions[i]);
- for (resetMaskSet(!0), i = startPos + 1; i <= getLastValidPosition(); ) {
- for (;void 0 !== getMaskSet().validPositions[startPos]; ) startPos++;
- if (i < startPos && (i = startPos + 1), void 0 === getMaskSet().validPositions[i] && isMask(i)) i++; else {
- var t = getTestTemplate(i);
- needsValidation === !1 && positionsClone[startPos] && positionsClone[startPos].match.def === t.match.def ? (getMaskSet().validPositions[startPos] = $.extend(!0, {}, positionsClone[startPos]),
- getMaskSet().validPositions[startPos].input = t.input, delete getMaskSet().validPositions[i],
- i++) : positionCanMatchDefinition(startPos, t.match.def) ? isValid(startPos, t.input || getPlaceholder(i), !0) !== !1 && (delete getMaskSet().validPositions[i],
- i++, needsValidation = !0) : isMask(i) || (i++, startPos--), startPos++;
- }
- }
- resetMaskSet(!0);
- }
- function determineTestTemplate(tests, guessNextBest) {
- for (var testPos, testPositions = tests, lvp = getLastValidPosition(), lvTest = getMaskSet().validPositions[lvp] || getTests(0)[0], lvTestAltArr = void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation].toString().split(",") : [], ndx = 0; ndx < testPositions.length && (testPos = testPositions[ndx],
- !(testPos.match && (opts.greedy && testPos.match.optionalQuantifier !== !0 || (testPos.match.optionality === !1 || testPos.match.newBlockMarker === !1) && testPos.match.optionalQuantifier !== !0) && (void 0 === lvTest.alternation || lvTest.alternation !== testPos.alternation || void 0 !== testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAltArr))) || guessNextBest === !0 && (null !== testPos.match.fn || /[0-9a-bA-Z]/.test(testPos.match.def))); ndx++) ;
- return testPos;
- }
- function getTestTemplate(pos, ndxIntlzr, tstPs) {
- return getMaskSet().validPositions[pos] || determineTestTemplate(getTests(pos, ndxIntlzr ? ndxIntlzr.slice() : ndxIntlzr, tstPs));
- }
- function getTest(pos) {
- return getMaskSet().validPositions[pos] ? getMaskSet().validPositions[pos] : getTests(pos)[0];
- }
- function positionCanMatchDefinition(pos, def) {
- for (var valid = !1, tests = getTests(pos), tndx = 0; tndx < tests.length; tndx++) if (tests[tndx].match && tests[tndx].match.def === def) {
- valid = !0;
- break;
- }
- return valid;
- }
- function getTests(pos, ndxIntlzr, tstPs) {
- function resolveTestFromToken(maskToken, ndxInitializer, loopNdx, quantifierRecurse) {
- function handleMatch(match, loopNdx, quantifierRecurse) {
- function isFirstMatch(latestMatch, tokenGroup) {
- var firstMatch = 0 === $.inArray(latestMatch, tokenGroup.matches);
- return firstMatch || $.each(tokenGroup.matches, function(ndx, match) {
- if (match.isQuantifier === !0 && (firstMatch = isFirstMatch(latestMatch, tokenGroup.matches[ndx - 1]))) return !1;
- }), firstMatch;
- }
- function resolveNdxInitializer(pos, alternateNdx, targetAlternation) {
- var bestMatch, indexPos;
- return (getMaskSet().tests[pos] || getMaskSet().validPositions[pos]) && $.each(getMaskSet().tests[pos] || [ getMaskSet().validPositions[pos] ], function(ndx, lmnt) {
- var alternation = void 0 !== targetAlternation ? targetAlternation : lmnt.alternation, ndxPos = void 0 !== lmnt.locator[alternation] ? lmnt.locator[alternation].toString().indexOf(alternateNdx) : -1;
- (void 0 === indexPos || ndxPos < indexPos) && ndxPos !== -1 && (bestMatch = lmnt,
- indexPos = ndxPos);
- }), bestMatch ? bestMatch.locator.slice((void 0 !== targetAlternation ? targetAlternation : bestMatch.alternation) + 1) : void 0 !== targetAlternation ? resolveNdxInitializer(pos, alternateNdx) : void 0;
- }
- function staticCanMatchDefinition(source, target) {
- return null === source.match.fn && null !== target.match.fn && target.match.fn.test(source.match.def, getMaskSet(), pos, !1, opts, !1);
- }
- if (testPos > 1e4) throw "Inputmask: There is probably an error in your mask definition or in the code. Create an issue on github with an example of the mask you are using. " + getMaskSet().mask;
- if (testPos === pos && void 0 === match.matches) return matches.push({
- match: match,
- locator: loopNdx.reverse(),
- cd: cacheDependency
- }), !0;
- if (void 0 !== match.matches) {
- if (match.isGroup && quantifierRecurse !== match) {
- if (match = handleMatch(maskToken.matches[$.inArray(match, maskToken.matches) + 1], loopNdx)) return !0;
- } else if (match.isOptional) {
- var optionalToken = match;
- if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) {
- if (latestMatch = matches[matches.length - 1].match, !isFirstMatch(latestMatch, optionalToken)) return !0;
- insertStop = !0, testPos = pos;
- }
- } else if (match.isAlternator) {
- var maltMatches, alternateToken = match, malternateMatches = [], currentMatches = matches.slice(), loopNdxCnt = loopNdx.length, altIndex = ndxInitializer.length > 0 ? ndxInitializer.shift() : -1;
- if (altIndex === -1 || "string" == typeof altIndex) {
- var amndx, currentPos = testPos, ndxInitializerClone = ndxInitializer.slice(), altIndexArr = [];
- if ("string" == typeof altIndex) altIndexArr = altIndex.split(","); else for (amndx = 0; amndx < alternateToken.matches.length; amndx++) altIndexArr.push(amndx);
- for (var ndx = 0; ndx < altIndexArr.length; ndx++) {
- if (amndx = parseInt(altIndexArr[ndx]), matches = [], ndxInitializer = resolveNdxInitializer(testPos, amndx, loopNdxCnt) || ndxInitializerClone.slice(),
- match = handleMatch(alternateToken.matches[amndx] || maskToken.matches[amndx], [ amndx ].concat(loopNdx), quantifierRecurse) || match,
- match !== !0 && void 0 !== match && altIndexArr[altIndexArr.length - 1] < alternateToken.matches.length) {
- var ntndx = $.inArray(match, maskToken.matches) + 1;
- maskToken.matches.length > ntndx && (match = handleMatch(maskToken.matches[ntndx], [ ntndx ].concat(loopNdx.slice(1, loopNdx.length)), quantifierRecurse),
- match && (altIndexArr.push(ntndx.toString()), $.each(matches, function(ndx, lmnt) {
- lmnt.alternation = loopNdx.length - 1;
- })));
- }
- maltMatches = matches.slice(), testPos = currentPos, matches = [];
- for (var ndx1 = 0; ndx1 < maltMatches.length; ndx1++) {
- var altMatch = maltMatches[ndx1], hasMatch = !1;
- altMatch.alternation = altMatch.alternation || loopNdxCnt;
- for (var ndx2 = 0; ndx2 < malternateMatches.length; ndx2++) {
- var altMatch2 = malternateMatches[ndx2];
- if (("string" != typeof altIndex || $.inArray(altMatch.locator[altMatch.alternation].toString(), altIndexArr) !== -1) && (altMatch.match.def === altMatch2.match.def || staticCanMatchDefinition(altMatch, altMatch2))) {
- hasMatch = altMatch.match.nativeDef === altMatch2.match.nativeDef, altMatch.alternation == altMatch2.alternation && altMatch2.locator[altMatch2.alternation].toString().indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.locator[altMatch2.alternation] = altMatch2.locator[altMatch2.alternation] + "," + altMatch.locator[altMatch.alternation],
- altMatch2.alternation = altMatch.alternation, null == altMatch.match.fn && (altMatch2.na = altMatch2.na || altMatch.locator[altMatch.alternation].toString(),
- altMatch2.na.indexOf(altMatch.locator[altMatch.alternation]) === -1 && (altMatch2.na = altMatch2.na + "," + altMatch.locator[altMatch.alternation])));
- break;
- }
- }
- hasMatch || malternateMatches.push(altMatch);
- }
- }
- "string" == typeof altIndex && (malternateMatches = $.map(malternateMatches, function(lmnt, ndx) {
- if (isFinite(ndx)) {
- var mamatch, alternation = lmnt.alternation, altLocArr = lmnt.locator[alternation].toString().split(",");
- lmnt.locator[alternation] = void 0, lmnt.alternation = void 0;
- for (var alndx = 0; alndx < altLocArr.length; alndx++) mamatch = $.inArray(altLocArr[alndx], altIndexArr) !== -1,
- mamatch && (void 0 !== lmnt.locator[alternation] ? (lmnt.locator[alternation] += ",",
- lmnt.locator[alternation] += altLocArr[alndx]) : lmnt.locator[alternation] = parseInt(altLocArr[alndx]),
- lmnt.alternation = alternation);
- if (void 0 !== lmnt.locator[alternation]) return lmnt;
- }
- })), matches = currentMatches.concat(malternateMatches), testPos = pos, insertStop = matches.length > 0,
- ndxInitializer = ndxInitializerClone.slice();
- } else match = handleMatch(alternateToken.matches[altIndex] || maskToken.matches[altIndex], [ altIndex ].concat(loopNdx), quantifierRecurse);
- if (match) return !0;
- } else if (match.isQuantifier && quantifierRecurse !== maskToken.matches[$.inArray(match, maskToken.matches) - 1]) for (var qt = match, qndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; qndx < (isNaN(qt.quantifier.max) ? qndx + 1 : qt.quantifier.max) && testPos <= pos; qndx++) {
- var tokenGroup = maskToken.matches[$.inArray(qt, maskToken.matches) - 1];
- if (match = handleMatch(tokenGroup, [ qndx ].concat(loopNdx), tokenGroup)) {
- if (latestMatch = matches[matches.length - 1].match, latestMatch.optionalQuantifier = qndx > qt.quantifier.min - 1,
- isFirstMatch(latestMatch, tokenGroup)) {
- if (qndx > qt.quantifier.min - 1) {
- insertStop = !0, testPos = pos;
- break;
- }
- return !0;
- }
- return !0;
- }
- } else if (match = resolveTestFromToken(match, ndxInitializer, loopNdx, quantifierRecurse)) return !0;
- } else testPos++;
- }
- for (var tndx = ndxInitializer.length > 0 ? ndxInitializer.shift() : 0; tndx < maskToken.matches.length; tndx++) if (maskToken.matches[tndx].isQuantifier !== !0) {
- var match = handleMatch(maskToken.matches[tndx], [ tndx ].concat(loopNdx), quantifierRecurse);
- if (match && testPos === pos) return match;
- if (testPos > pos) break;
- }
- }
- function mergeLocators(tests) {
- var locator = [];
- return $.isArray(tests) || (tests = [ tests ]), tests.length > 0 && (void 0 === tests[0].alternation ? (locator = determineTestTemplate(tests.slice()).locator.slice(),
- 0 === locator.length && (locator = tests[0].locator.slice())) : $.each(tests, function(ndx, tst) {
- if ("" !== tst.def) if (0 === locator.length) locator = tst.locator.slice(); else for (var i = 0; i < locator.length; i++) tst.locator[i] && locator[i].toString().indexOf(tst.locator[i]) === -1 && (locator[i] += "," + tst.locator[i]);
- })), locator;
- }
- function filterTests(tests) {
- return opts.keepStatic && pos > 0 && tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0) && tests[0].match.optionality !== !0 && tests[0].match.optionalQuantifier !== !0 && null === tests[0].match.fn && !/[0-9a-bA-Z]/.test(tests[0].match.def) ? [ determineTestTemplate(tests) ] : tests;
- }
- var latestMatch, maskTokens = getMaskSet().maskToken, testPos = ndxIntlzr ? tstPs : 0, ndxInitializer = ndxIntlzr ? ndxIntlzr.slice() : [ 0 ], matches = [], insertStop = !1, cacheDependency = ndxIntlzr ? ndxIntlzr.join("") : "";
- if (pos > -1) {
- if (void 0 === ndxIntlzr) {
- for (var test, previousPos = pos - 1; void 0 === (test = getMaskSet().validPositions[previousPos] || getMaskSet().tests[previousPos]) && previousPos > -1; ) previousPos--;
- void 0 !== test && previousPos > -1 && (ndxInitializer = mergeLocators(test), cacheDependency = ndxInitializer.join(""),
- testPos = previousPos);
- }
- if (getMaskSet().tests[pos] && getMaskSet().tests[pos][0].cd === cacheDependency) return filterTests(getMaskSet().tests[pos]);
- for (var mtndx = ndxInitializer.shift(); mtndx < maskTokens.length; mtndx++) {
- var match = resolveTestFromToken(maskTokens[mtndx], ndxInitializer, [ mtndx ]);
- if (match && testPos === pos || testPos > pos) break;
- }
- }
- return (0 === matches.length || insertStop) && matches.push({
- match: {
- fn: null,
- cardinality: 0,
- optionality: !0,
- casing: null,
- def: "",
- placeholder: ""
- },
- locator: [],
- cd: cacheDependency
- }), void 0 !== ndxIntlzr && getMaskSet().tests[pos] ? filterTests($.extend(!0, [], matches)) : (getMaskSet().tests[pos] = $.extend(!0, [], matches),
- filterTests(getMaskSet().tests[pos]));
- }
- function getBufferTemplate() {
- return void 0 === getMaskSet()._buffer && (getMaskSet()._buffer = getMaskTemplate(!1, 1),
- void 0 === getMaskSet().buffer && getMaskSet()._buffer.slice()), getMaskSet()._buffer;
- }
- function getBuffer(noCache) {
- return void 0 !== getMaskSet().buffer && noCache !== !0 || (getMaskSet().buffer = getMaskTemplate(!0, getLastValidPosition(), !0)),
- getMaskSet().buffer;
- }
- function refreshFromBuffer(start, end, buffer) {
- var i;
- if (start === !0) resetMaskSet(), start = 0, end = buffer.length; else for (i = start; i < end; i++) delete getMaskSet().validPositions[i];
- for (i = start; i < end; i++) resetMaskSet(!0), buffer[i] !== opts.skipOptionalPartCharacter && isValid(i, buffer[i], !0, !0);
- }
- function casing(elem, test, pos) {
- switch (opts.casing || test.casing) {
- case "upper":
- elem = elem.toUpperCase();
- break;
-
- case "lower":
- elem = elem.toLowerCase();
- break;
-
- case "title":
- var posBefore = getMaskSet().validPositions[pos - 1];
- elem = 0 === pos || posBefore && posBefore.input === String.fromCharCode(Inputmask.keyCode.SPACE) ? elem.toUpperCase() : elem.toLowerCase();
- }
- return elem;
- }
- function checkAlternationMatch(altArr1, altArr2, na) {
- for (var naNdx, altArrC = opts.greedy ? altArr2 : altArr2.slice(0, 1), isMatch = !1, naArr = void 0 !== na ? na.split(",") : [], i = 0; i < naArr.length; i++) (naNdx = altArr1.indexOf(naArr[i])) !== -1 && altArr1.splice(naNdx, 1);
- for (var alndx = 0; alndx < altArr1.length; alndx++) if ($.inArray(altArr1[alndx], altArrC) !== -1) {
- isMatch = !0;
- break;
- }
- return isMatch;
- }
- function isValid(pos, c, strict, fromSetValid, fromAlternate) {
- function isSelection(posObj) {
- var selection = isRTL ? posObj.begin - posObj.end > 1 || posObj.begin - posObj.end === 1 && opts.insertMode : posObj.end - posObj.begin > 1 || posObj.end - posObj.begin === 1 && opts.insertMode;
- return selection && 0 === posObj.begin && posObj.end === getMaskSet().maskLength ? "full" : selection;
- }
- function _isValid(position, c, strict) {
- var rslt = !1;
- return $.each(getTests(position), function(ndx, tst) {
- for (var test = tst.match, loopend = c ? 1 : 0, chrs = "", i = test.cardinality; i > loopend; i--) chrs += getBufferElement(position - (i - 1));
- if (c && (chrs += c), getBuffer(!0), rslt = null != test.fn ? test.fn.test(chrs, getMaskSet(), position, strict, opts, isSelection(pos)) : (c === test.def || c === opts.skipOptionalPartCharacter) && "" !== test.def && {
- c: getPlaceholder(position, test, !0) || test.def,
- pos: position
- }, rslt !== !1) {
- var elem = void 0 !== rslt.c ? rslt.c : c;
- elem = elem === opts.skipOptionalPartCharacter && null === test.fn ? getPlaceholder(position, test, !0) || test.def : elem;
- var validatedPos = position, possibleModifiedBuffer = getBuffer();
- if (void 0 !== rslt.remove && ($.isArray(rslt.remove) || (rslt.remove = [ rslt.remove ]),
- $.each(rslt.remove.sort(function(a, b) {
- return b - a;
- }), function(ndx, lmnt) {
- stripValidPositions(lmnt, lmnt + 1, !0);
- })), void 0 !== rslt.insert && ($.isArray(rslt.insert) || (rslt.insert = [ rslt.insert ]),
- $.each(rslt.insert.sort(function(a, b) {
- return a - b;
- }), function(ndx, lmnt) {
- isValid(lmnt.pos, lmnt.c, !0, fromSetValid);
- })), rslt.refreshFromBuffer) {
- var refresh = rslt.refreshFromBuffer;
- if (strict = !0, refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, possibleModifiedBuffer),
- void 0 === rslt.pos && void 0 === rslt.c) return rslt.pos = getLastValidPosition(),
- !1;
- if (validatedPos = void 0 !== rslt.pos ? rslt.pos : position, validatedPos !== position) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0, fromSetValid)),
- !1;
- } else if (rslt !== !0 && void 0 !== rslt.pos && rslt.pos !== position && (validatedPos = rslt.pos,
- refreshFromBuffer(position, validatedPos, getBuffer().slice()), validatedPos !== position)) return rslt = $.extend(rslt, isValid(validatedPos, elem, !0)),
- !1;
- return (rslt === !0 || void 0 !== rslt.pos || void 0 !== rslt.c) && (ndx > 0 && resetMaskSet(!0),
- setValidPosition(validatedPos, $.extend({}, tst, {
- input: casing(elem, test, validatedPos)
- }), fromSetValid, isSelection(pos)) || (rslt = !1), !1);
- }
- }), rslt;
- }
- function alternate(pos, c, strict) {
- var lastAlt, alternation, altPos, prevAltPos, i, validPos, altNdxs, decisionPos, validPsClone = $.extend(!0, {}, getMaskSet().validPositions), isValidRslt = !1, lAltPos = getLastValidPosition();
- for (prevAltPos = getMaskSet().validPositions[lAltPos]; lAltPos >= 0; lAltPos--) if (altPos = getMaskSet().validPositions[lAltPos],
- altPos && void 0 !== altPos.alternation) {
- if (lastAlt = lAltPos, alternation = getMaskSet().validPositions[lastAlt].alternation,
- prevAltPos.locator[altPos.alternation] !== altPos.locator[altPos.alternation]) break;
- prevAltPos = altPos;
- }
- if (void 0 !== alternation) {
- decisionPos = parseInt(lastAlt);
- var decisionTaker = void 0 !== prevAltPos.locator[prevAltPos.alternation || alternation] ? prevAltPos.locator[prevAltPos.alternation || alternation] : altNdxs[0];
- decisionTaker.length > 0 && (decisionTaker = decisionTaker.split(",")[0]);
- var possibilityPos = getMaskSet().validPositions[decisionPos], prevPos = getMaskSet().validPositions[decisionPos - 1];
- $.each(getTests(decisionPos, prevPos ? prevPos.locator : void 0, decisionPos - 1), function(ndx, test) {
- altNdxs = test.locator[alternation] ? test.locator[alternation].toString().split(",") : [];
- for (var mndx = 0; mndx < altNdxs.length; mndx++) {
- var validInputs = [], staticInputsBeforePos = 0, staticInputsBeforePosAlternate = 0, verifyValidInput = !1;
- if (decisionTaker < altNdxs[mndx] && (void 0 === test.na || $.inArray(altNdxs[mndx], test.na.split(",")) === -1)) {
- getMaskSet().validPositions[decisionPos] = $.extend(!0, {}, test);
- var possibilities = getMaskSet().validPositions[decisionPos].locator;
- for (getMaskSet().validPositions[decisionPos].locator[alternation] = parseInt(altNdxs[mndx]),
- null == test.match.fn ? (possibilityPos.input !== test.match.def && (verifyValidInput = !0,
- possibilityPos.generatedInput !== !0 && validInputs.push(possibilityPos.input)),
- staticInputsBeforePosAlternate++, getMaskSet().validPositions[decisionPos].generatedInput = !/[0-9a-bA-Z]/.test(test.match.def),
- getMaskSet().validPositions[decisionPos].input = test.match.def) : getMaskSet().validPositions[decisionPos].input = possibilityPos.input,
- i = decisionPos + 1; i < getLastValidPosition(void 0, !0) + 1; i++) validPos = getMaskSet().validPositions[i],
- validPos && validPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(validPos.input) ? validInputs.push(validPos.input) : i < pos && staticInputsBeforePos++,
- delete getMaskSet().validPositions[i];
- for (verifyValidInput && validInputs[0] === test.match.def && validInputs.shift(),
- resetMaskSet(!0), isValidRslt = !0; validInputs.length > 0; ) {
- var input = validInputs.shift();
- if (input !== opts.skipOptionalPartCharacter && !(isValidRslt = isValid(getLastValidPosition(void 0, !0) + 1, input, !1, fromSetValid, !0))) break;
- }
- if (isValidRslt) {
- getMaskSet().validPositions[decisionPos].locator = possibilities;
- var targetLvp = getLastValidPosition(pos) + 1;
- for (i = decisionPos + 1; i < getLastValidPosition() + 1; i++) validPos = getMaskSet().validPositions[i],
- (void 0 === validPos || null == validPos.match.fn) && i < pos + (staticInputsBeforePosAlternate - staticInputsBeforePos) && staticInputsBeforePosAlternate++;
- pos += staticInputsBeforePosAlternate - staticInputsBeforePos, isValidRslt = isValid(pos > targetLvp ? targetLvp : pos, c, strict, fromSetValid, !0);
- }
- if (isValidRslt) return !1;
- resetMaskSet(), getMaskSet().validPositions = $.extend(!0, {}, validPsClone);
- }
- }
- });
- }
- return isValidRslt;
- }
- function trackbackAlternations(originalPos, newPos) {
- var vp = getMaskSet().validPositions[newPos];
- if (vp) for (var targetLocator = vp.locator, tll = targetLocator.length, ps = originalPos; ps < newPos; ps++) if (void 0 === getMaskSet().validPositions[ps] && !isMask(ps, !0)) {
- var tests = getTests(ps).slice(), bestMatch = determineTestTemplate(tests, !0), equality = -1;
- "" === tests[tests.length - 1].match.def && tests.pop(), $.each(tests, function(ndx, tst) {
- for (var i = 0; i < tll; i++) {
- if (void 0 === tst.locator[i] || !checkAlternationMatch(tst.locator[i].toString().split(","), targetLocator[i].toString().split(","), tst.na)) {
- var targetAI = targetLocator[i], bestMatchAI = bestMatch.locator[i], tstAI = tst.locator[i];
- targetAI - bestMatchAI > Math.abs(targetAI - tstAI) && (bestMatch = tst);
- break;
- }
- equality < i && (equality = i, bestMatch = tst);
- }
- }), bestMatch = $.extend({}, bestMatch, {
- input: getPlaceholder(ps, bestMatch.match, !0) || bestMatch.match.def
- }), bestMatch.generatedInput = !0, setValidPosition(ps, bestMatch, !0), getMaskSet().validPositions[newPos] = void 0,
- _isValid(newPos, vp.input, !0);
- }
- }
- function setValidPosition(pos, validTest, fromSetValid, isSelection) {
- if (isSelection || opts.insertMode && void 0 !== getMaskSet().validPositions[pos] && void 0 === fromSetValid) {
- var i, positionsClone = $.extend(!0, {}, getMaskSet().validPositions), lvp = getLastValidPosition(void 0, !0);
- for (i = pos; i <= lvp; i++) delete getMaskSet().validPositions[i];
- getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
- var j, valid = !0, vps = getMaskSet().validPositions, needsValidation = !1, initialLength = getMaskSet().maskLength;
- for (i = j = pos; i <= lvp; i++) {
- var t = positionsClone[i];
- if (void 0 !== t) for (var posMatch = j; posMatch < getMaskSet().maskLength && (null === t.match.fn && vps[i] && (vps[i].match.optionalQuantifier === !0 || vps[i].match.optionality === !0) || null != t.match.fn); ) {
- if (posMatch++, needsValidation === !1 && positionsClone[posMatch] && positionsClone[posMatch].match.def === t.match.def) getMaskSet().validPositions[posMatch] = $.extend(!0, {}, positionsClone[posMatch]),
- getMaskSet().validPositions[posMatch].input = t.input, fillMissingNonMask(posMatch),
- j = posMatch, valid = !0; else if (positionCanMatchDefinition(posMatch, t.match.def)) {
- var result = isValid(posMatch, t.input, !0, !0);
- valid = result !== !1, j = result.caret || result.insert ? getLastValidPosition() : posMatch,
- needsValidation = !0;
- } else if (valid = t.generatedInput === !0, !valid && posMatch >= getMaskSet().maskLength - 1) break;
- if (getMaskSet().maskLength < initialLength && (getMaskSet().maskLength = initialLength),
- valid) break;
- }
- if (!valid) break;
- }
- if (!valid) return getMaskSet().validPositions = $.extend(!0, {}, positionsClone),
- resetMaskSet(!0), !1;
- } else getMaskSet().validPositions[pos] = $.extend(!0, {}, validTest);
- return resetMaskSet(!0), !0;
- }
- function fillMissingNonMask(maskPos) {
- for (var pndx = maskPos - 1; pndx > -1 && !getMaskSet().validPositions[pndx]; pndx--) ;
- var testTemplate, testsFromPos;
- for (pndx++; pndx < maskPos; pndx++) void 0 === getMaskSet().validPositions[pndx] && (opts.jitMasking === !1 || opts.jitMasking > pndx) && (testsFromPos = getTests(pndx, getTestTemplate(pndx - 1).locator, pndx - 1).slice(),
- "" === testsFromPos[testsFromPos.length - 1].match.def && testsFromPos.pop(), testTemplate = determineTestTemplate(testsFromPos),
- testTemplate && (testTemplate.match.def === opts.radixPointDefinitionSymbol || !isMask(pndx, !0) || $.inArray(opts.radixPoint, getBuffer()) < pndx && testTemplate.match.fn && testTemplate.match.fn.test(getPlaceholder(pndx), getMaskSet(), pndx, !1, opts)) && (result = _isValid(pndx, getPlaceholder(pndx, testTemplate.match, !0) || (null == testTemplate.match.fn ? testTemplate.match.def : "" !== getPlaceholder(pndx) ? getPlaceholder(pndx) : getBuffer()[pndx]), !0),
- result !== !1 && (getMaskSet().validPositions[result.pos || pndx].generatedInput = !0)));
- }
- strict = strict === !0;
- var maskPos = pos;
- void 0 !== pos.begin && (maskPos = isRTL && !isSelection(pos) ? pos.end : pos.begin);
- var result = !1, positionsClone = $.extend(!0, {}, getMaskSet().validPositions);
- if (fillMissingNonMask(maskPos), isSelection(pos) && (handleRemove(void 0, Inputmask.keyCode.DELETE, pos),
- maskPos = getMaskSet().p), maskPos < getMaskSet().maskLength && (result = _isValid(maskPos, c, strict),
- (!strict || fromSetValid === !0) && result === !1)) {
- var currentPosValid = getMaskSet().validPositions[maskPos];
- if (!currentPosValid || null !== currentPosValid.match.fn || currentPosValid.match.def !== c && c !== opts.skipOptionalPartCharacter) {
- if ((opts.insertMode || void 0 === getMaskSet().validPositions[seekNext(maskPos)]) && !isMask(maskPos, !0)) for (var nPos = maskPos + 1, snPos = seekNext(maskPos); nPos <= snPos; nPos++) if (result = _isValid(nPos, c, strict),
- result !== !1) {
- trackbackAlternations(maskPos, void 0 !== result.pos ? result.pos : nPos), maskPos = nPos;
- break;
- }
- } else result = {
- caret: seekNext(maskPos)
- };
- }
- return result === !1 && opts.keepStatic && !strict && fromAlternate !== !0 && (result = alternate(maskPos, c, strict)),
- result === !0 && (result = {
- pos: maskPos
- }), $.isFunction(opts.postValidation) && result !== !1 && !strict && fromSetValid !== !0 && (result = !!opts.postValidation(getBuffer(!0), result, opts) && result),
- void 0 === result.pos && (result.pos = maskPos), result === !1 && (resetMaskSet(!0),
- getMaskSet().validPositions = $.extend(!0, {}, positionsClone)), result;
- }
- function isMask(pos, strict) {
- var test;
- if (strict ? (test = getTestTemplate(pos).match, "" === test.def && (test = getTest(pos).match)) : test = getTest(pos).match,
- null != test.fn) return test.fn;
- if (strict !== !0 && pos > -1) {
- var tests = getTests(pos);
- return tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0);
- }
- return !1;
- }
- function seekNext(pos, newBlock) {
- var maskL = getMaskSet().maskLength;
- if (pos >= maskL) return maskL;
- for (var position = pos; ++position < maskL && (newBlock === !0 && (getTest(position).match.newBlockMarker !== !0 || !isMask(position)) || newBlock !== !0 && !isMask(position)); ) ;
- return position;
- }
- function seekPrevious(pos, newBlock) {
- var tests, position = pos;
- if (position <= 0) return 0;
- for (;--position > 0 && (newBlock === !0 && getTest(position).match.newBlockMarker !== !0 || newBlock !== !0 && !isMask(position) && (tests = getTests(position),
- tests.length < 2 || 2 === tests.length && "" === tests[1].match.def)); ) ;
- return position;
- }
- function getBufferElement(position) {
- return void 0 === getMaskSet().validPositions[position] ? getPlaceholder(position) : getMaskSet().validPositions[position].input;
- }
- function writeBuffer(input, buffer, caretPos, event, triggerInputEvent) {
- if (event && $.isFunction(opts.onBeforeWrite)) {
- var result = opts.onBeforeWrite(event, buffer, caretPos, opts);
- if (result) {
- if (result.refreshFromBuffer) {
- var refresh = result.refreshFromBuffer;
- refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer || buffer),
- buffer = getBuffer(!0);
- }
- void 0 !== caretPos && (caretPos = void 0 !== result.caret ? result.caret : caretPos);
- }
- }
- input.inputmask._valueSet(buffer.join("")), void 0 === caretPos || void 0 !== event && "blur" === event.type ? renderColorMask(input, buffer, caretPos) : caret(input, caretPos),
- triggerInputEvent === !0 && (skipInputEvent = !0, $(input).trigger("input"));
- }
- function getPlaceholder(pos, test, returnPL) {
- if (test = test || getTest(pos).match, void 0 !== test.placeholder || returnPL === !0) return $.isFunction(test.placeholder) ? test.placeholder(opts) : test.placeholder;
- if (null === test.fn) {
- if (pos > -1 && void 0 === getMaskSet().validPositions[pos]) {
- var prevTest, tests = getTests(pos), staticAlternations = [];
- if (tests.length > 1 + ("" === tests[tests.length - 1].match.def ? 1 : 0)) for (var i = 0; i < tests.length; i++) if (tests[i].match.optionality !== !0 && tests[i].match.optionalQuantifier !== !0 && (null === tests[i].match.fn || void 0 === prevTest || tests[i].match.fn.test(prevTest.match.def, getMaskSet(), pos, !0, opts) !== !1) && (staticAlternations.push(tests[i]),
- null === tests[i].match.fn && (prevTest = tests[i]), staticAlternations.length > 1 && /[0-9a-bA-Z]/.test(staticAlternations[0].match.def))) return opts.placeholder.charAt(pos % opts.placeholder.length);
- }
- return test.def;
- }
- return opts.placeholder.charAt(pos % opts.placeholder.length);
- }
- function checkVal(input, writeOut, strict, nptvl, initiatingEvent, stickyCaret) {
- function isTemplateMatch() {
- var isMatch = !1, charCodeNdx = getBufferTemplate().slice(initialNdx, seekNext(initialNdx)).join("").indexOf(charCodes);
- if (charCodeNdx !== -1 && !isMask(initialNdx)) {
- isMatch = !0;
- for (var bufferTemplateArr = getBufferTemplate().slice(initialNdx, initialNdx + charCodeNdx), i = 0; i < bufferTemplateArr.length; i++) if (" " !== bufferTemplateArr[i]) {
- isMatch = !1;
- break;
- }
- }
- return isMatch;
- }
- var inputValue = nptvl.slice(), charCodes = "", initialNdx = 0, result = void 0;
- if (resetMaskSet(), getMaskSet().p = seekNext(-1), !strict) if (opts.autoUnmask !== !0) {
- var staticInput = getBufferTemplate().slice(0, seekNext(-1)).join(""), matches = inputValue.join("").match(new RegExp("^" + Inputmask.escapeRegex(staticInput), "g"));
- matches && matches.length > 0 && (inputValue.splice(0, matches.length * staticInput.length),
- initialNdx = seekNext(initialNdx));
- } else initialNdx = seekNext(initialNdx);
- if ($.each(inputValue, function(ndx, charCode) {
- if (void 0 !== charCode) {
- var keypress = new $.Event("keypress");
- keypress.which = charCode.charCodeAt(0), charCodes += charCode;
- var lvp = getLastValidPosition(void 0, !0), lvTest = getMaskSet().validPositions[lvp], nextTest = getTestTemplate(lvp + 1, lvTest ? lvTest.locator.slice() : void 0, lvp);
- if (!isTemplateMatch() || strict || opts.autoUnmask) {
- var pos = strict ? ndx : null == nextTest.match.fn && nextTest.match.optionality && lvp + 1 < getMaskSet().p ? lvp + 1 : getMaskSet().p;
- result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, strict, pos),
- initialNdx = pos + 1, charCodes = "";
- } else result = EventHandlers.keypressEvent.call(input, keypress, !0, !1, !0, lvp + 1);
- if (!strict && $.isFunction(opts.onBeforeWrite) && (result = opts.onBeforeWrite(keypress, getBuffer(), result.forwardPosition, opts),
- result && result.refreshFromBuffer)) {
- var refresh = result.refreshFromBuffer;
- refreshFromBuffer(refresh === !0 ? refresh : refresh.start, refresh.end, result.buffer),
- resetMaskSet(!0), result.caret && (getMaskSet().p = result.caret);
- }
- }
- }), writeOut) {
- var caretPos = void 0, lvp = getLastValidPosition();
- document.activeElement === input && (initiatingEvent || result) && (caretPos = caret(input).begin,
- initiatingEvent && result === !1 && (caretPos = seekNext(getLastValidPosition(caretPos))),
- result && stickyCaret !== !0 && (caretPos < lvp + 1 || lvp === -1) && (caretPos = opts.numericInput && void 0 === result.caret ? seekPrevious(result.forwardPosition) : result.forwardPosition)),
- writeBuffer(input, getBuffer(), caretPos, initiatingEvent || new $.Event("checkval"));
- }
- }
- function unmaskedvalue(input) {
- if (input) {
- if (void 0 === input.inputmask) return input.value;
- input.inputmask && input.inputmask.refreshValue && EventHandlers.setValueEvent.call(input);
- }
- var umValue = [], vps = getMaskSet().validPositions;
- for (var pndx in vps) vps[pndx].match && null != vps[pndx].match.fn && umValue.push(vps[pndx].input);
- var unmaskedValue = 0 === umValue.length ? "" : (isRTL ? umValue.reverse() : umValue).join("");
- if ($.isFunction(opts.onUnMask)) {
- var bufferValue = (isRTL ? getBuffer().slice().reverse() : getBuffer()).join("");
- unmaskedValue = opts.onUnMask(bufferValue, unmaskedValue, opts) || unmaskedValue;
- }
- return unmaskedValue;
- }
- function caret(input, begin, end, notranslate) {
- function translatePosition(pos) {
- if (notranslate !== !0 && isRTL && "number" == typeof pos && (!opts.greedy || "" !== opts.placeholder)) {
- var bffrLght = getBuffer().join("").length;
- pos = bffrLght - pos;
- }
- return pos;
- }
- var range;
- if ("number" != typeof begin) return input.setSelectionRange ? (begin = input.selectionStart,
- end = input.selectionEnd) : window.getSelection ? (range = window.getSelection().getRangeAt(0),
- range.commonAncestorContainer.parentNode !== input && range.commonAncestorContainer !== input || (begin = range.startOffset,
- end = range.endOffset)) : document.selection && document.selection.createRange && (range = document.selection.createRange(),
- begin = 0 - range.duplicate().moveStart("character", -input.inputmask._valueGet().length),
- end = begin + range.text.length), {
- begin: translatePosition(begin),
- end: translatePosition(end)
- };
- begin = translatePosition(begin), end = translatePosition(end), end = "number" == typeof end ? end : begin;
- var scrollCalc = parseInt(((input.ownerDocument.defaultView || window).getComputedStyle ? (input.ownerDocument.defaultView || window).getComputedStyle(input, null) : input.currentStyle).fontSize) * end;
- if (input.scrollLeft = scrollCalc > input.scrollWidth ? scrollCalc : 0, mobile || opts.insertMode !== !1 || begin !== end || end++,
- input.setSelectionRange) input.selectionStart = begin, input.selectionEnd = end; else if (window.getSelection) {
- if (range = document.createRange(), void 0 === input.firstChild || null === input.firstChild) {
- var textNode = document.createTextNode("");
- input.appendChild(textNode);
- }
- range.setStart(input.firstChild, begin < input.inputmask._valueGet().length ? begin : input.inputmask._valueGet().length),
- range.setEnd(input.firstChild, end < input.inputmask._valueGet().length ? end : input.inputmask._valueGet().length),
- range.collapse(!0);
- var sel = window.getSelection();
- sel.removeAllRanges(), sel.addRange(range);
- } else input.createTextRange && (range = input.createTextRange(), range.collapse(!0),
- range.moveEnd("character", end), range.moveStart("character", begin), range.select());
- renderColorMask(input, void 0, {
- begin: begin,
- end: end
- });
- }
- function determineLastRequiredPosition(returnDefinition) {
- var pos, testPos, buffer = getBuffer(), bl = buffer.length, lvp = getLastValidPosition(), positions = {}, lvTest = getMaskSet().validPositions[lvp], ndxIntlzr = void 0 !== lvTest ? lvTest.locator.slice() : void 0;
- for (pos = lvp + 1; pos < buffer.length; pos++) testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
- ndxIntlzr = testPos.locator.slice(), positions[pos] = $.extend(!0, {}, testPos);
- var lvTestAlt = lvTest && void 0 !== lvTest.alternation ? lvTest.locator[lvTest.alternation] : void 0;
- for (pos = bl - 1; pos > lvp && (testPos = positions[pos], (testPos.match.optionality || testPos.match.optionalQuantifier || lvTestAlt && (lvTestAlt !== positions[pos].locator[lvTest.alternation] && null != testPos.match.fn || null === testPos.match.fn && testPos.locator[lvTest.alternation] && checkAlternationMatch(testPos.locator[lvTest.alternation].toString().split(","), lvTestAlt.toString().split(",")) && "" !== getTests(pos)[0].def)) && buffer[pos] === getPlaceholder(pos, testPos.match)); pos--) bl--;
- return returnDefinition ? {
- l: bl,
- def: positions[bl] ? positions[bl].match : void 0
- } : bl;
- }
- function clearOptionalTail(buffer) {
- for (var validPos, rl = determineLastRequiredPosition(), bl = buffer.length; rl < bl && !isMask(rl + 1) && (validPos = getTest(rl + 1)) && validPos.match.optionality !== !0 && validPos.match.optionalQuantifier !== !0; ) rl++;
- for (;(validPos = getTest(rl - 1)) && validPos.match.optionality && validPos.input === opts.skipOptionalPartCharacter; ) rl--;
- return buffer.splice(rl), buffer;
- }
- function isComplete(buffer) {
- if ($.isFunction(opts.isComplete)) return opts.isComplete(buffer, opts);
- if ("*" !== opts.repeat) {
- var complete = !1, lrp = determineLastRequiredPosition(!0), aml = seekPrevious(lrp.l);
- if (void 0 === lrp.def || lrp.def.newBlockMarker || lrp.def.optionality || lrp.def.optionalQuantifier) {
- complete = !0;
- for (var i = 0; i <= aml; i++) {
- var test = getTestTemplate(i).match;
- if (null !== test.fn && void 0 === getMaskSet().validPositions[i] && test.optionality !== !0 && test.optionalQuantifier !== !0 || null === test.fn && buffer[i] !== getPlaceholder(i, test)) {
- complete = !1;
- break;
- }
- }
- }
- return complete;
- }
- }
- function handleRemove(input, k, pos, strict) {
- function generalize() {
- if (opts.keepStatic) {
- for (var validInputs = [], lastAlt = getLastValidPosition(-1, !0), positionsClone = $.extend(!0, {}, getMaskSet().validPositions), prevAltPos = getMaskSet().validPositions[lastAlt]; lastAlt >= 0; lastAlt--) {
- var altPos = getMaskSet().validPositions[lastAlt];
- if (altPos) {
- if (altPos.generatedInput !== !0 && /[0-9a-bA-Z]/.test(altPos.input) && validInputs.push(altPos.input),
- delete getMaskSet().validPositions[lastAlt], void 0 !== altPos.alternation && altPos.locator[altPos.alternation] !== prevAltPos.locator[altPos.alternation]) break;
- prevAltPos = altPos;
- }
- }
- if (lastAlt > -1) for (getMaskSet().p = seekNext(getLastValidPosition(-1, !0)); validInputs.length > 0; ) {
- var keypress = new $.Event("keypress");
- keypress.which = validInputs.pop().charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !1, !1, getMaskSet().p);
- } else getMaskSet().validPositions = $.extend(!0, {}, positionsClone);
- }
- }
- if ((opts.numericInput || isRTL) && (k === Inputmask.keyCode.BACKSPACE ? k = Inputmask.keyCode.DELETE : k === Inputmask.keyCode.DELETE && (k = Inputmask.keyCode.BACKSPACE),
- isRTL)) {
- var pend = pos.end;
- pos.end = pos.begin, pos.begin = pend;
- }
- k === Inputmask.keyCode.BACKSPACE && (pos.end - pos.begin < 1 || opts.insertMode === !1) ? (pos.begin = seekPrevious(pos.begin),
- void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.begin--) : k === Inputmask.keyCode.DELETE && pos.begin === pos.end && (pos.end = isMask(pos.end, !0) ? pos.end + 1 : seekNext(pos.end) + 1,
- void 0 === getMaskSet().validPositions[pos.begin] || getMaskSet().validPositions[pos.begin].input !== opts.groupSeparator && getMaskSet().validPositions[pos.begin].input !== opts.radixPoint || pos.end++),
- stripValidPositions(pos.begin, pos.end, !1, strict), strict !== !0 && generalize();
- var lvp = getLastValidPosition(pos.begin, !0);
- lvp < pos.begin ? getMaskSet().p = seekNext(lvp) : strict !== !0 && (getMaskSet().p = pos.begin);
- }
- function initializeColorMask(input) {
- function findCaretPos(clientx) {
- var caretPos, e = document.createElement("span");
- for (var style in computedStyle) isNaN(style) && style.indexOf("font") !== -1 && (e.style[style] = computedStyle[style]);
- e.style.textTransform = computedStyle.textTransform, e.style.letterSpacing = computedStyle.letterSpacing,
- e.style.position = "absolute", e.style.height = "auto", e.style.width = "auto",
- e.style.visibility = "hidden", e.style.whiteSpace = "nowrap", document.body.appendChild(e);
- var itl, inputText = input.inputmask._valueGet(), previousWidth = 0;
- for (caretPos = 0, itl = inputText.length; caretPos <= itl; caretPos++) {
- if (e.innerHTML += inputText.charAt(caretPos) || "_", e.offsetWidth >= clientx) {
- var offset1 = clientx - previousWidth, offset2 = e.offsetWidth - clientx;
- e.innerHTML = inputText.charAt(caretPos), offset1 -= e.offsetWidth / 3, caretPos = offset1 < offset2 ? caretPos - 1 : caretPos;
- break;
- }
- previousWidth = e.offsetWidth;
- }
- return document.body.removeChild(e), caretPos;
- }
- function position() {
- colorMask.style.position = "absolute", colorMask.style.top = offset.top + "px",
- colorMask.style.left = offset.left + "px", colorMask.style.width = parseInt(input.offsetWidth) - parseInt(computedStyle.paddingLeft) - parseInt(computedStyle.paddingRight) - parseInt(computedStyle.borderLeftWidth) - parseInt(computedStyle.borderRightWidth) + "px",
- colorMask.style.height = parseInt(input.offsetHeight) - parseInt(computedStyle.paddingTop) - parseInt(computedStyle.paddingBottom) - parseInt(computedStyle.borderTopWidth) - parseInt(computedStyle.borderBottomWidth) + "px",
- colorMask.style.lineHeight = colorMask.style.height, colorMask.style.zIndex = isNaN(computedStyle.zIndex) ? -1 : computedStyle.zIndex - 1,
- colorMask.style.webkitAppearance = "textfield", colorMask.style.mozAppearance = "textfield",
- colorMask.style.Appearance = "textfield";
- }
- var offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null);
- input.parentNode;
- colorMask = document.createElement("div"), document.body.appendChild(colorMask);
- for (var style in computedStyle) isNaN(style) && "cssText" !== style && style.indexOf("webkit") == -1 && (colorMask.style[style] = computedStyle[style]);
- input.style.backgroundColor = "transparent", input.style.color = "transparent",
- input.style.webkitAppearance = "caret", input.style.mozAppearance = "caret", input.style.Appearance = "caret",
- position(), $(window).on("resize", function(e) {
- offset = $(input).position(), computedStyle = (input.ownerDocument.defaultView || window).getComputedStyle(input, null),
- position();
- }), $(input).on("click", function(e) {
- return caret(input, findCaretPos(e.clientX)), EventHandlers.clickEvent.call(this, [ e ]);
- }), $(input).on("keydown", function(e) {
- e.shiftKey || opts.insertMode === !1 || setTimeout(function() {
- renderColorMask(input);
- }, 0);
- });
- }
- function renderColorMask(input, buffer, caretPos) {
- function handleStatic() {
- isStatic || null !== test.fn && void 0 !== testPos.input ? isStatic && null !== test.fn && void 0 !== testPos.input && (isStatic = !1,
- maskTemplate += "") : (isStatic = !0, maskTemplate += "");
- }
- if (void 0 !== colorMask) {
- buffer = buffer || getBuffer(), void 0 === caretPos ? caretPos = caret(input) : void 0 === caretPos.begin && (caretPos = {
- begin: caretPos,
- end: caretPos
- });
- var maskTemplate = "", isStatic = !1;
- if ("" != buffer) {
- var ndxIntlzr, test, testPos, pos = 0, lvp = getLastValidPosition();
- do pos === caretPos.begin && document.activeElement === input && (maskTemplate += " "),
- getMaskSet().validPositions[pos] ? (testPos = getMaskSet().validPositions[pos],
- test = testPos.match, ndxIntlzr = testPos.locator.slice(), handleStatic(), maskTemplate += testPos.input) : (testPos = getTestTemplate(pos, ndxIntlzr, pos - 1),
- test = testPos.match, ndxIntlzr = testPos.locator.slice(), (opts.jitMasking === !1 || pos < lvp || "number" == typeof opts.jitMasking && isFinite(opts.jitMasking) && opts.jitMasking > pos) && (handleStatic(),
- maskTemplate += getPlaceholder(pos, test))), pos++; while ((void 0 === maxLength || pos < maxLength) && (null !== test.fn || "" !== test.def) || lvp > pos);
- }
- colorMask.innerHTML = maskTemplate;
- }
- }
- function mask(elem) {
- function isElementTypeSupported(input, opts) {
- function patchValueProperty(npt) {
- function patchValhook(type) {
- if ($.valHooks && (void 0 === $.valHooks[type] || $.valHooks[type].inputmaskpatch !== !0)) {
- var valhookGet = $.valHooks[type] && $.valHooks[type].get ? $.valHooks[type].get : function(elem) {
- return elem.value;
- }, valhookSet = $.valHooks[type] && $.valHooks[type].set ? $.valHooks[type].set : function(elem, value) {
- return elem.value = value, elem;
- };
- $.valHooks[type] = {
- get: function(elem) {
- if (elem.inputmask) {
- if (elem.inputmask.opts.autoUnmask) return elem.inputmask.unmaskedvalue();
- var result = valhookGet(elem);
- return getLastValidPosition(void 0, void 0, elem.inputmask.maskset.validPositions) !== -1 || opts.nullable !== !0 ? result : "";
- }
- return valhookGet(elem);
- },
- set: function(elem, value) {
- var result, $elem = $(elem);
- return result = valhookSet(elem, value), elem.inputmask && $elem.trigger("setvalue"),
- result;
- },
- inputmaskpatch: !0
- };
- }
- }
- function getter() {
- return this.inputmask ? this.inputmask.opts.autoUnmask ? this.inputmask.unmaskedvalue() : getLastValidPosition() !== -1 || opts.nullable !== !0 ? document.activeElement === this && opts.clearMaskOnLostFocus ? (isRTL ? clearOptionalTail(getBuffer().slice()).reverse() : clearOptionalTail(getBuffer().slice())).join("") : valueGet.call(this) : "" : valueGet.call(this);
- }
- function setter(value) {
- valueSet.call(this, value), this.inputmask && $(this).trigger("setvalue");
- }
- function installNativeValueSetFallback(npt) {
- EventRuler.on(npt, "mouseenter", function(event) {
- var $input = $(this), input = this, value = input.inputmask._valueGet();
- value !== getBuffer().join("") && $input.trigger("setvalue");
- });
- }
- var valueGet, valueSet;
- if (!npt.inputmask.__valueGet) {
- if (opts.noValuePatching !== !0) {
- if (Object.getOwnPropertyDescriptor) {
- "function" != typeof Object.getPrototypeOf && (Object.getPrototypeOf = "object" == typeof "test".__proto__ ? function(object) {
- return object.__proto__;
- } : function(object) {
- return object.constructor.prototype;
- });
- var valueProperty = Object.getPrototypeOf ? Object.getOwnPropertyDescriptor(Object.getPrototypeOf(npt), "value") : void 0;
- valueProperty && valueProperty.get && valueProperty.set ? (valueGet = valueProperty.get,
- valueSet = valueProperty.set, Object.defineProperty(npt, "value", {
- get: getter,
- set: setter,
- configurable: !0
- })) : "INPUT" !== npt.tagName && (valueGet = function() {
- return this.textContent;
- }, valueSet = function(value) {
- this.textContent = value;
- }, Object.defineProperty(npt, "value", {
- get: getter,
- set: setter,
- configurable: !0
- }));
- } else document.__lookupGetter__ && npt.__lookupGetter__("value") && (valueGet = npt.__lookupGetter__("value"),
- valueSet = npt.__lookupSetter__("value"), npt.__defineGetter__("value", getter),
- npt.__defineSetter__("value", setter));
- npt.inputmask.__valueGet = valueGet, npt.inputmask.__valueSet = valueSet;
- }
- npt.inputmask._valueGet = function(overruleRTL) {
- return isRTL && overruleRTL !== !0 ? valueGet.call(this.el).split("").reverse().join("") : valueGet.call(this.el);
- }, npt.inputmask._valueSet = function(value, overruleRTL) {
- valueSet.call(this.el, null === value || void 0 === value ? "" : overruleRTL !== !0 && isRTL ? value.split("").reverse().join("") : value);
- }, void 0 === valueGet && (valueGet = function() {
- return this.value;
- }, valueSet = function(value) {
- this.value = value;
- }, patchValhook(npt.type), installNativeValueSetFallback(npt));
- }
- }
- var elementType = input.getAttribute("type"), isSupported = "INPUT" === input.tagName && $.inArray(elementType, opts.supportsInputType) !== -1 || input.isContentEditable || "TEXTAREA" === input.tagName;
- if (!isSupported) if ("INPUT" === input.tagName) {
- var el = document.createElement("input");
- el.setAttribute("type", elementType), isSupported = "text" === el.type, el = null;
- } else isSupported = "partial";
- return isSupported !== !1 && patchValueProperty(input), isSupported;
- }
- EventRuler.off(el);
- var isSupported = isElementTypeSupported(elem, opts);
- if (isSupported !== !1 && (el = elem, $el = $(el), ("rtl" === el.dir || opts.rightAlign) && (el.style.textAlign = "right"),
- ("rtl" === el.dir || opts.numericInput) && (el.dir = "ltr", el.removeAttribute("dir"),
- el.inputmask.isRTL = !0, isRTL = !0), opts.colorMask === !0 && initializeColorMask(el),
- android && (el.hasOwnProperty("inputmode") && (el.inputmode = opts.inputmode, el.setAttribute("inputmode", opts.inputmode)),
- "rtfm" === opts.androidHack && (opts.colorMask !== !0 && initializeColorMask(el),
- el.type = "password")), isSupported === !0 && (EventRuler.on(el, "submit", EventHandlers.submitEvent),
- EventRuler.on(el, "reset", EventHandlers.resetEvent), EventRuler.on(el, "mouseenter", EventHandlers.mouseenterEvent),
- EventRuler.on(el, "blur", EventHandlers.blurEvent), EventRuler.on(el, "focus", EventHandlers.focusEvent),
- EventRuler.on(el, "mouseleave", EventHandlers.mouseleaveEvent), opts.colorMask !== !0 && EventRuler.on(el, "click", EventHandlers.clickEvent),
- EventRuler.on(el, "dblclick", EventHandlers.dblclickEvent), EventRuler.on(el, "paste", EventHandlers.pasteEvent),
- EventRuler.on(el, "dragdrop", EventHandlers.pasteEvent), EventRuler.on(el, "drop", EventHandlers.pasteEvent),
- EventRuler.on(el, "cut", EventHandlers.cutEvent), EventRuler.on(el, "complete", opts.oncomplete),
- EventRuler.on(el, "incomplete", opts.onincomplete), EventRuler.on(el, "cleared", opts.oncleared),
- android && opts.inputEventOnly === !0 || (EventRuler.on(el, "keydown", EventHandlers.keydownEvent),
- EventRuler.on(el, "keypress", EventHandlers.keypressEvent)), EventRuler.on(el, "compositionstart", $.noop),
- EventRuler.on(el, "compositionupdate", $.noop), EventRuler.on(el, "compositionend", $.noop),
- EventRuler.on(el, "keyup", $.noop), EventRuler.on(el, "input", EventHandlers.inputFallBackEvent),
- EventRuler.on(el, "beforeinput", $.noop)), EventRuler.on(el, "setvalue", EventHandlers.setValueEvent),
- getBufferTemplate(), "" !== el.inputmask._valueGet() || opts.clearMaskOnLostFocus === !1 || document.activeElement === el)) {
- var initialValue = $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(el.inputmask._valueGet(), opts) || el.inputmask._valueGet() : el.inputmask._valueGet();
- checkVal(el, !0, !1, initialValue.split(""));
- var buffer = getBuffer().slice();
- undoValue = buffer.join(""), isComplete(buffer) === !1 && opts.clearIncomplete && resetMaskSet(),
- opts.clearMaskOnLostFocus && document.activeElement !== el && (getLastValidPosition() === -1 ? buffer = [] : clearOptionalTail(buffer)),
- writeBuffer(el, buffer), document.activeElement === el && caret(el, seekNext(getLastValidPosition()));
- }
- }
- maskset = maskset || this.maskset, opts = opts || this.opts;
- var undoValue, $el, maxLength, colorMask, valueBuffer, el = this.el, isRTL = this.isRTL, skipKeyPressEvent = !1, skipInputEvent = !1, ignorable = !1, mouseEnter = !1, EventRuler = {
- on: function(input, eventName, eventHandler) {
- var ev = function(e) {
- if (void 0 === this.inputmask && "FORM" !== this.nodeName) {
- var imOpts = $.data(this, "_inputmask_opts");
- imOpts ? new Inputmask(imOpts).mask(this) : EventRuler.off(this);
- } else {
- if ("setvalue" === e.type || "FORM" === this.nodeName || !(this.disabled || this.readOnly && !("keydown" === e.type && e.ctrlKey && 67 === e.keyCode || opts.tabThrough === !1 && e.keyCode === Inputmask.keyCode.TAB))) {
- switch (e.type) {
- case "input":
- if (skipInputEvent === !0) return skipInputEvent = !1, e.preventDefault();
- break;
-
- case "keydown":
- skipKeyPressEvent = !1, skipInputEvent = !1;
- break;
-
- case "keypress":
- if (skipKeyPressEvent === !0) return e.preventDefault();
- skipKeyPressEvent = !0;
- break;
-
- case "click":
- if (iemobile || iphone) {
- var that = this, args = arguments;
- return setTimeout(function() {
- eventHandler.apply(that, args);
- }, 0), !1;
- }
- }
- var returnVal = eventHandler.apply(this, arguments);
- return returnVal === !1 && (e.preventDefault(), e.stopPropagation()), returnVal;
- }
- e.preventDefault();
- }
- };
- input.inputmask.events[eventName] = input.inputmask.events[eventName] || [], input.inputmask.events[eventName].push(ev),
- $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).on(eventName, ev) : $(input).on(eventName, ev);
- },
- off: function(input, event) {
- if (input.inputmask && input.inputmask.events) {
- var events;
- event ? (events = [], events[event] = input.inputmask.events[event]) : events = input.inputmask.events,
- $.each(events, function(eventName, evArr) {
- for (;evArr.length > 0; ) {
- var ev = evArr.pop();
- $.inArray(eventName, [ "submit", "reset" ]) !== -1 ? null != input.form && $(input.form).off(eventName, ev) : $(input).off(eventName, ev);
- }
- delete input.inputmask.events[eventName];
- });
- }
- }
- }, EventHandlers = {
- keydownEvent: function(e) {
- function isInputEventSupported(eventName) {
- var el = document.createElement("input"), evName = "on" + eventName, isSupported = evName in el;
- return isSupported || (el.setAttribute(evName, "return;"), isSupported = "function" == typeof el[evName]),
- el = null, isSupported;
- }
- var input = this, $input = $(input), k = e.keyCode, pos = caret(input);
- if (k === Inputmask.keyCode.BACKSPACE || k === Inputmask.keyCode.DELETE || iphone && k === Inputmask.keyCode.BACKSPACE_SAFARI || e.ctrlKey && k === Inputmask.keyCode.X && !isInputEventSupported("cut")) e.preventDefault(),
- handleRemove(input, k, pos), writeBuffer(input, getBuffer(!0), getMaskSet().p, e, input.inputmask._valueGet() !== getBuffer().join("")),
- input.inputmask._valueGet() === getBufferTemplate().join("") ? $input.trigger("cleared") : isComplete(getBuffer()) === !0 && $input.trigger("complete"); else if (k === Inputmask.keyCode.END || k === Inputmask.keyCode.PAGE_DOWN) {
- e.preventDefault();
- var caretPos = seekNext(getLastValidPosition());
- opts.insertMode || caretPos !== getMaskSet().maskLength || e.shiftKey || caretPos--,
- caret(input, e.shiftKey ? pos.begin : caretPos, caretPos, !0);
- } else k === Inputmask.keyCode.HOME && !e.shiftKey || k === Inputmask.keyCode.PAGE_UP ? (e.preventDefault(),
- caret(input, 0, e.shiftKey ? pos.begin : 0, !0)) : (opts.undoOnEscape && k === Inputmask.keyCode.ESCAPE || 90 === k && e.ctrlKey) && e.altKey !== !0 ? (checkVal(input, !0, !1, undoValue.split("")),
- $input.trigger("click")) : k !== Inputmask.keyCode.INSERT || e.shiftKey || e.ctrlKey ? opts.tabThrough === !0 && k === Inputmask.keyCode.TAB ? (e.shiftKey === !0 ? (null === getTest(pos.begin).match.fn && (pos.begin = seekNext(pos.begin)),
- pos.end = seekPrevious(pos.begin, !0), pos.begin = seekPrevious(pos.end, !0)) : (pos.begin = seekNext(pos.begin, !0),
- pos.end = seekNext(pos.begin, !0), pos.end < getMaskSet().maskLength && pos.end--),
- pos.begin < getMaskSet().maskLength && (e.preventDefault(), caret(input, pos.begin, pos.end))) : e.shiftKey || opts.insertMode === !1 && (k === Inputmask.keyCode.RIGHT ? setTimeout(function() {
- var caretPos = caret(input);
- caret(input, caretPos.begin);
- }, 0) : k === Inputmask.keyCode.LEFT && setTimeout(function() {
- var caretPos = caret(input);
- caret(input, isRTL ? caretPos.begin + 1 : caretPos.begin - 1);
- }, 0)) : (opts.insertMode = !opts.insertMode, caret(input, opts.insertMode || pos.begin !== getMaskSet().maskLength ? pos.begin : pos.begin - 1));
- opts.onKeyDown.call(this, e, getBuffer(), caret(input).begin, opts), ignorable = $.inArray(k, opts.ignorables) !== -1;
- },
- keypressEvent: function(e, checkval, writeOut, strict, ndx) {
- var input = this, $input = $(input), k = e.which || e.charCode || e.keyCode;
- if (!(checkval === !0 || e.ctrlKey && e.altKey) && (e.ctrlKey || e.metaKey || ignorable)) return k === Inputmask.keyCode.ENTER && undoValue !== getBuffer().join("") && (undoValue = getBuffer().join(""),
- setTimeout(function() {
- $input.trigger("change");
- }, 0)), !0;
- if (k) {
- 46 === k && e.shiftKey === !1 && "" !== opts.radixPoint && (k = opts.radixPoint.charCodeAt(0));
- var forwardPosition, pos = checkval ? {
- begin: ndx,
- end: ndx
- } : caret(input), c = String.fromCharCode(k);
- getMaskSet().writeOutBuffer = !0;
- var valResult = isValid(pos, c, strict);
- if (valResult !== !1 && (resetMaskSet(!0), forwardPosition = void 0 !== valResult.caret ? valResult.caret : checkval ? valResult.pos + 1 : seekNext(valResult.pos),
- getMaskSet().p = forwardPosition), writeOut !== !1) {
- var self = this;
- if (setTimeout(function() {
- opts.onKeyValidation.call(self, k, valResult, opts);
- }, 0), getMaskSet().writeOutBuffer && valResult !== !1) {
- var buffer = getBuffer();
- writeBuffer(input, buffer, opts.numericInput && void 0 === valResult.caret ? seekPrevious(forwardPosition) : forwardPosition, e, checkval !== !0),
- checkval !== !0 && setTimeout(function() {
- isComplete(buffer) === !0 && $input.trigger("complete");
- }, 0);
- }
- }
- if (e.preventDefault(), checkval) return valResult.forwardPosition = forwardPosition,
- valResult;
- }
- },
- pasteEvent: function(e) {
- var tempValue, input = this, ev = e.originalEvent || e, $input = $(input), inputValue = input.inputmask._valueGet(!0), caretPos = caret(input);
- isRTL && (tempValue = caretPos.end, caretPos.end = caretPos.begin, caretPos.begin = tempValue);
- var valueBeforeCaret = inputValue.substr(0, caretPos.begin), valueAfterCaret = inputValue.substr(caretPos.end, inputValue.length);
- if (valueBeforeCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(0, caretPos.begin).join("") && (valueBeforeCaret = ""),
- valueAfterCaret === (isRTL ? getBufferTemplate().reverse() : getBufferTemplate()).slice(caretPos.end).join("") && (valueAfterCaret = ""),
- isRTL && (tempValue = valueBeforeCaret, valueBeforeCaret = valueAfterCaret, valueAfterCaret = tempValue),
- window.clipboardData && window.clipboardData.getData) inputValue = valueBeforeCaret + window.clipboardData.getData("Text") + valueAfterCaret; else {
- if (!ev.clipboardData || !ev.clipboardData.getData) return !0;
- inputValue = valueBeforeCaret + ev.clipboardData.getData("text/plain") + valueAfterCaret;
- }
- var pasteValue = inputValue;
- if ($.isFunction(opts.onBeforePaste)) {
- if (pasteValue = opts.onBeforePaste(inputValue, opts), pasteValue === !1) return e.preventDefault();
- pasteValue || (pasteValue = inputValue);
- }
- return checkVal(input, !1, !1, isRTL ? pasteValue.split("").reverse() : pasteValue.toString().split("")),
- writeBuffer(input, getBuffer(), seekNext(getLastValidPosition()), e, undoValue !== getBuffer().join("")),
- isComplete(getBuffer()) === !0 && $input.trigger("complete"), e.preventDefault();
- },
- inputFallBackEvent: function(e) {
- var input = this, inputValue = input.inputmask._valueGet();
- if (getBuffer().join("") !== inputValue) {
- var caretPos = caret(input);
- if (inputValue = inputValue.replace(new RegExp("(" + Inputmask.escapeRegex(getBufferTemplate().join("")) + ")*"), ""),
- iemobile) {
- var inputChar = inputValue.replace(getBuffer().join(""), "");
- if (1 === inputChar.length) {
- var keypress = new $.Event("keypress");
- return keypress.which = inputChar.charCodeAt(0), EventHandlers.keypressEvent.call(input, keypress, !0, !0, !1, getMaskSet().validPositions[caretPos.begin - 1] ? caretPos.begin : caretPos.begin - 1),
- !1;
- }
- }
- if (caretPos.begin > inputValue.length && (caret(input, inputValue.length), caretPos = caret(input)),
- getBuffer().length - inputValue.length !== 1 || inputValue.charAt(caretPos.begin) === getBuffer()[caretPos.begin] || inputValue.charAt(caretPos.begin + 1) === getBuffer()[caretPos.begin] || isMask(caretPos.begin)) {
- for (var lvp = getLastValidPosition() + 1, bufferTemplate = getBufferTemplate().join(""); null === inputValue.match(Inputmask.escapeRegex(bufferTemplate) + "$"); ) bufferTemplate = bufferTemplate.slice(1);
- inputValue = inputValue.replace(bufferTemplate, ""), inputValue = inputValue.split(""),
- checkVal(input, !0, !1, inputValue, e, caretPos.begin < lvp), isComplete(getBuffer()) === !0 && $(input).trigger("complete");
- } else e.keyCode = Inputmask.keyCode.BACKSPACE, EventHandlers.keydownEvent.call(input, e);
- e.preventDefault();
- }
- },
- setValueEvent: function(e) {
- this.inputmask.refreshValue = !1;
- var input = this, value = input.inputmask._valueGet();
- checkVal(input, !0, !1, ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(value, opts) || value : value).split("")),
- undoValue = getBuffer().join(""), (opts.clearMaskOnLostFocus || opts.clearIncomplete) && input.inputmask._valueGet() === getBufferTemplate().join("") && input.inputmask._valueSet("");
- },
- focusEvent: function(e) {
- var input = this, nptValue = input.inputmask._valueGet();
- opts.showMaskOnFocus && (!opts.showMaskOnHover || opts.showMaskOnHover && "" === nptValue) && (input.inputmask._valueGet() !== getBuffer().join("") ? writeBuffer(input, getBuffer(), seekNext(getLastValidPosition())) : mouseEnter === !1 && caret(input, seekNext(getLastValidPosition()))),
- opts.positionCaretOnTab === !0 && EventHandlers.clickEvent.apply(input, [ e, !0 ]),
- undoValue = getBuffer().join("");
- },
- mouseleaveEvent: function(e) {
- var input = this;
- if (mouseEnter = !1, opts.clearMaskOnLostFocus && document.activeElement !== input) {
- var buffer = getBuffer().slice(), nptValue = input.inputmask._valueGet();
- nptValue !== input.getAttribute("placeholder") && "" !== nptValue && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer),
- writeBuffer(input, buffer));
- }
- },
- clickEvent: function(e, tabbed) {
- function doRadixFocus(clickPos) {
- if ("" !== opts.radixPoint) {
- var vps = getMaskSet().validPositions;
- if (void 0 === vps[clickPos] || vps[clickPos].input === getPlaceholder(clickPos)) {
- if (clickPos < seekNext(-1)) return !0;
- var radixPos = $.inArray(opts.radixPoint, getBuffer());
- if (radixPos !== -1) {
- for (var vp in vps) if (radixPos < vp && vps[vp].input !== getPlaceholder(vp)) return !1;
- return !0;
- }
- }
- }
- return !1;
- }
- var input = this;
- setTimeout(function() {
- if (document.activeElement === input) {
- var selectedCaret = caret(input);
- if (tabbed && (selectedCaret.begin = selectedCaret.end), selectedCaret.begin === selectedCaret.end) switch (opts.positionCaretOnClick) {
- case "none":
- break;
-
- case "radixFocus":
- if (doRadixFocus(selectedCaret.begin)) {
- var radixPos = $.inArray(opts.radixPoint, getBuffer().join(""));
- caret(input, opts.numericInput ? seekNext(radixPos) : radixPos);
- break;
- }
-
- default:
- var clickPosition = selectedCaret.begin, lvclickPosition = getLastValidPosition(clickPosition, !0), lastPosition = seekNext(lvclickPosition);
- if (clickPosition < lastPosition) caret(input, isMask(clickPosition) || isMask(clickPosition - 1) ? clickPosition : seekNext(clickPosition)); else {
- var placeholder = getPlaceholder(lastPosition);
- ("" !== placeholder && getBuffer()[lastPosition] !== placeholder && getTest(lastPosition).match.optionalQuantifier !== !0 || !isMask(lastPosition) && getTest(lastPosition).match.def === placeholder) && (lastPosition = seekNext(lastPosition)),
- caret(input, lastPosition);
- }
- }
- }
- }, 0);
- },
- dblclickEvent: function(e) {
- var input = this;
- setTimeout(function() {
- caret(input, 0, seekNext(getLastValidPosition()));
- }, 0);
- },
- cutEvent: function(e) {
- var input = this, $input = $(input), pos = caret(input), ev = e.originalEvent || e, clipboardData = window.clipboardData || ev.clipboardData, clipData = isRTL ? getBuffer().slice(pos.end, pos.begin) : getBuffer().slice(pos.begin, pos.end);
- clipboardData.setData("text", isRTL ? clipData.reverse().join("") : clipData.join("")),
- document.execCommand && document.execCommand("copy"), handleRemove(input, Inputmask.keyCode.DELETE, pos),
- writeBuffer(input, getBuffer(), getMaskSet().p, e, undoValue !== getBuffer().join("")),
- input.inputmask._valueGet() === getBufferTemplate().join("") && $input.trigger("cleared");
- },
- blurEvent: function(e) {
- var $input = $(this), input = this;
- if (input.inputmask) {
- var nptValue = input.inputmask._valueGet(), buffer = getBuffer().slice();
- undoValue !== buffer.join("") && setTimeout(function() {
- $input.trigger("change"), undoValue = buffer.join("");
- }, 0), "" !== nptValue && (opts.clearMaskOnLostFocus && (getLastValidPosition() === -1 && nptValue === getBufferTemplate().join("") ? buffer = [] : clearOptionalTail(buffer)),
- isComplete(buffer) === !1 && (setTimeout(function() {
- $input.trigger("incomplete");
- }, 0), opts.clearIncomplete && (resetMaskSet(), buffer = opts.clearMaskOnLostFocus ? [] : getBufferTemplate().slice())),
- writeBuffer(input, buffer, void 0, e));
- }
- },
- mouseenterEvent: function(e) {
- var input = this;
- mouseEnter = !0, document.activeElement !== input && opts.showMaskOnHover && input.inputmask._valueGet() !== getBuffer().join("") && writeBuffer(input, getBuffer());
- },
- submitEvent: function(e) {
- undoValue !== getBuffer().join("") && $el.trigger("change"), opts.clearMaskOnLostFocus && getLastValidPosition() === -1 && el.inputmask._valueGet && el.inputmask._valueGet() === getBufferTemplate().join("") && el.inputmask._valueSet(""),
- opts.removeMaskOnSubmit && (el.inputmask._valueSet(el.inputmask.unmaskedvalue(), !0),
- setTimeout(function() {
- writeBuffer(el, getBuffer());
- }, 0));
- },
- resetEvent: function(e) {
- el.inputmask.refreshValue = !0, setTimeout(function() {
- $el.trigger("setvalue");
- }, 0);
- }
- };
- if (void 0 !== actionObj) switch (actionObj.action) {
- case "isComplete":
- return el = actionObj.el, isComplete(getBuffer());
-
- case "unmaskedvalue":
- return void 0 !== el && void 0 === actionObj.value || (valueBuffer = actionObj.value,
- valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(valueBuffer, opts) || valueBuffer : valueBuffer).split(""),
- checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts)),
- unmaskedvalue(el);
-
- case "mask":
- mask(el);
- break;
-
- case "format":
- return valueBuffer = ($.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(actionObj.value, opts) || actionObj.value : actionObj.value).split(""),
- checkVal(void 0, !1, !1, isRTL ? valueBuffer.reverse() : valueBuffer), $.isFunction(opts.onBeforeWrite) && opts.onBeforeWrite(void 0, getBuffer(), 0, opts),
- actionObj.metadata ? {
- value: isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join(""),
- metadata: maskScope.call(this, {
- action: "getmetadata"
- }, maskset, opts)
- } : isRTL ? getBuffer().slice().reverse().join("") : getBuffer().join("");
-
- case "isValid":
- actionObj.value ? (valueBuffer = actionObj.value.split(""), checkVal(void 0, !1, !0, isRTL ? valueBuffer.reverse() : valueBuffer)) : actionObj.value = getBuffer().join("");
- for (var buffer = getBuffer(), rl = determineLastRequiredPosition(), lmib = buffer.length - 1; lmib > rl && !isMask(lmib); lmib--) ;
- return buffer.splice(rl, lmib + 1 - rl), isComplete(buffer) && actionObj.value === getBuffer().join("");
-
- case "getemptymask":
- return getBufferTemplate().join("");
-
- case "remove":
- if (el) {
- $el = $(el), el.inputmask._valueSet(unmaskedvalue(el)), EventRuler.off(el);
- var valueProperty;
- Object.getOwnPropertyDescriptor && Object.getPrototypeOf ? (valueProperty = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(el), "value"),
- valueProperty && el.inputmask.__valueGet && Object.defineProperty(el, "value", {
- get: el.inputmask.__valueGet,
- set: el.inputmask.__valueSet,
- configurable: !0
- })) : document.__lookupGetter__ && el.__lookupGetter__("value") && el.inputmask.__valueGet && (el.__defineGetter__("value", el.inputmask.__valueGet),
- el.__defineSetter__("value", el.inputmask.__valueSet)), el.inputmask = void 0;
- }
- return el;
-
- case "getmetadata":
- if ($.isArray(maskset.metadata)) {
- var maskTarget = getMaskTemplate(!0, 0, !1).join("");
- return $.each(maskset.metadata, function(ndx, mtdt) {
- if (mtdt.mask === maskTarget) return maskTarget = mtdt, !1;
- }), maskTarget;
- }
- return maskset.metadata;
- }
- }
- var ua = navigator.userAgent, mobile = /mobile/i.test(ua), iemobile = /iemobile/i.test(ua), iphone = /iphone/i.test(ua) && !iemobile, android = /android/i.test(ua) && !iemobile;
- return Inputmask.prototype = {
- dataAttribute: "data-inputmask",
- defaults: {
- placeholder: "_",
- optionalmarker: {
- start: "[",
- end: "]"
- },
- quantifiermarker: {
- start: "{",
- end: "}"
- },
- groupmarker: {
- start: "(",
- end: ")"
- },
- alternatormarker: "|",
- escapeChar: "\\",
- mask: null,
- oncomplete: $.noop,
- onincomplete: $.noop,
- oncleared: $.noop,
- repeat: 0,
- greedy: !0,
- autoUnmask: !1,
- removeMaskOnSubmit: !1,
- clearMaskOnLostFocus: !0,
- insertMode: !0,
- clearIncomplete: !1,
- alias: null,
- onKeyDown: $.noop,
- onBeforeMask: null,
- onBeforePaste: function(pastedValue, opts) {
- return $.isFunction(opts.onBeforeMask) ? opts.onBeforeMask(pastedValue, opts) : pastedValue;
- },
- onBeforeWrite: null,
- onUnMask: null,
- showMaskOnFocus: !0,
- showMaskOnHover: !0,
- onKeyValidation: $.noop,
- skipOptionalPartCharacter: " ",
- numericInput: !1,
- rightAlign: !1,
- undoOnEscape: !0,
- radixPoint: "",
- radixPointDefinitionSymbol: void 0,
- groupSeparator: "",
- keepStatic: null,
- positionCaretOnTab: !0,
- tabThrough: !1,
- supportsInputType: [ "text", "tel", "password" ],
- ignorables: [ 8, 9, 13, 19, 27, 33, 34, 35, 36, 37, 38, 39, 40, 45, 46, 93, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 0, 229 ],
- isComplete: null,
- canClearPosition: $.noop,
- postValidation: null,
- staticDefinitionSymbol: void 0,
- jitMasking: !1,
- nullable: !0,
- inputEventOnly: !1,
- noValuePatching: !1,
- positionCaretOnClick: "lvp",
- casing: null,
- inputmode: "verbatim",
- colorMask: !1,
- androidHack: !1
- },
- definitions: {
- "9": {
- validator: "[0-9]",
- cardinality: 1,
- definitionSymbol: "*"
- },
- a: {
- validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
- cardinality: 1,
- definitionSymbol: "*"
- },
- "*": {
- validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
- cardinality: 1
- }
- },
- aliases: {},
- masksCache: {},
- mask: function(elems) {
- function importAttributeOptions(npt, opts, userOptions, dataAttribute) {
- function importOption(option, optionData) {
- optionData = void 0 !== optionData ? optionData : npt.getAttribute(dataAttribute + "-" + option),
- null !== optionData && ("string" == typeof optionData && (0 === option.indexOf("on") ? optionData = window[optionData] : "false" === optionData ? optionData = !1 : "true" === optionData && (optionData = !0)),
- userOptions[option] = optionData);
- }
- var option, dataoptions, optionData, p, attrOptions = npt.getAttribute(dataAttribute);
- if (attrOptions && "" !== attrOptions && (attrOptions = attrOptions.replace(new RegExp("'", "g"), '"'),
- dataoptions = JSON.parse("{" + attrOptions + "}")), dataoptions) {
- optionData = void 0;
- for (p in dataoptions) if ("alias" === p.toLowerCase()) {
- optionData = dataoptions[p];
- break;
- }
- }
- importOption("alias", optionData), userOptions.alias && resolveAlias(userOptions.alias, userOptions, opts);
- for (option in opts) {
- if (dataoptions) {
- optionData = void 0;
- for (p in dataoptions) if (p.toLowerCase() === option.toLowerCase()) {
- optionData = dataoptions[p];
- break;
- }
- }
- importOption(option, optionData);
- }
- return $.extend(!0, opts, userOptions), opts;
- }
- var that = this;
- return "string" == typeof elems && (elems = document.getElementById(elems) || document.querySelectorAll(elems)),
- elems = elems.nodeName ? [ elems ] : elems, $.each(elems, function(ndx, el) {
- var scopedOpts = $.extend(!0, {}, that.opts);
- importAttributeOptions(el, scopedOpts, $.extend(!0, {}, that.userOptions), that.dataAttribute);
- var maskset = generateMaskSet(scopedOpts, that.noMasksCache);
- void 0 !== maskset && (void 0 !== el.inputmask && el.inputmask.remove(), el.inputmask = new Inputmask((void 0), (void 0), (!0)),
- el.inputmask.opts = scopedOpts, el.inputmask.noMasksCache = that.noMasksCache, el.inputmask.userOptions = $.extend(!0, {}, that.userOptions),
- el.inputmask.isRTL = that.isRTL, el.inputmask.el = el, el.inputmask.maskset = maskset,
- $.data(el, "_inputmask_opts", scopedOpts), maskScope.call(el.inputmask, {
- action: "mask"
- }));
- }), elems && elems[0] ? elems[0].inputmask || this : this;
- },
- option: function(options, noremask) {
- return "string" == typeof options ? this.opts[options] : "object" == typeof options ? ($.extend(this.userOptions, options),
- this.el && noremask !== !0 && this.mask(this.el), this) : void 0;
- },
- unmaskedvalue: function(value) {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "unmaskedvalue",
- value: value
- });
- },
- remove: function() {
- return maskScope.call(this, {
- action: "remove"
- });
- },
- getemptymask: function() {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "getemptymask"
- });
- },
- hasMaskedValue: function() {
- return !this.opts.autoUnmask;
- },
- isComplete: function() {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "isComplete"
- });
- },
- getmetadata: function() {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "getmetadata"
- });
- },
- isValid: function(value) {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "isValid",
- value: value
- });
- },
- format: function(value, metadata) {
- return this.maskset = this.maskset || generateMaskSet(this.opts, this.noMasksCache),
- maskScope.call(this, {
- action: "format",
- value: value,
- metadata: metadata
- });
- },
- analyseMask: function(mask, opts) {
- function MaskToken(isGroup, isOptional, isQuantifier, isAlternator) {
- this.matches = [], this.openGroup = isGroup || !1, this.isGroup = isGroup || !1,
- this.isOptional = isOptional || !1, this.isQuantifier = isQuantifier || !1, this.isAlternator = isAlternator || !1,
- this.quantifier = {
- min: 1,
- max: 1
- };
- }
- function insertTestDefinition(mtoken, element, position) {
- var maskdef = (opts.definitions ? opts.definitions[element] : void 0) || Inputmask.prototype.definitions[element];
- position = void 0 !== position ? position : mtoken.matches.length;
- var prevMatch = mtoken.matches[position - 1];
- if (maskdef && !escaped) {
- for (var prevalidators = maskdef.prevalidator, prevalidatorsL = prevalidators ? prevalidators.length : 0, i = 1; i < maskdef.cardinality; i++) {
- var prevalidator = prevalidatorsL >= i ? prevalidators[i - 1] : [], validator = prevalidator.validator, cardinality = prevalidator.cardinality;
- mtoken.matches.splice(position++, 0, {
- fn: validator ? "string" == typeof validator ? new RegExp(validator) : new function() {
- this.test = validator;
- }() : new RegExp("."),
- cardinality: cardinality ? cardinality : 1,
- optionality: mtoken.isOptional,
- newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
- casing: maskdef.casing,
- def: maskdef.definitionSymbol || element,
- placeholder: maskdef.placeholder,
- nativeDef: element
- }), prevMatch = mtoken.matches[position - 1];
- }
- mtoken.matches.splice(position++, 0, {
- fn: maskdef.validator ? "string" == typeof maskdef.validator ? new RegExp(maskdef.validator) : new function() {
- this.test = maskdef.validator;
- }() : new RegExp("."),
- cardinality: maskdef.cardinality,
- optionality: mtoken.isOptional,
- newBlockMarker: void 0 === prevMatch || prevMatch.def !== (maskdef.definitionSymbol || element),
- casing: maskdef.casing,
- def: maskdef.definitionSymbol || element,
- placeholder: maskdef.placeholder,
- nativeDef: element
- });
- } else mtoken.matches.splice(position++, 0, {
- fn: null,
- cardinality: 0,
- optionality: mtoken.isOptional,
- newBlockMarker: void 0 === prevMatch || prevMatch.def !== element,
- casing: null,
- def: opts.staticDefinitionSymbol || element,
- placeholder: void 0 !== opts.staticDefinitionSymbol ? element : void 0,
- nativeDef: element
- }), escaped = !1;
- }
- function verifyGroupMarker(maskToken) {
- maskToken && maskToken.matches && $.each(maskToken.matches, function(ndx, token) {
- var nextToken = maskToken.matches[ndx + 1];
- (void 0 === nextToken || void 0 === nextToken.matches || nextToken.isQuantifier === !1) && token && token.isGroup && (token.isGroup = !1,
- insertTestDefinition(token, opts.groupmarker.start, 0), token.openGroup !== !0 && insertTestDefinition(token, opts.groupmarker.end)),
- verifyGroupMarker(token);
- });
- }
- function defaultCase() {
- if (openenings.length > 0) {
- if (currentOpeningToken = openenings[openenings.length - 1], insertTestDefinition(currentOpeningToken, m),
- currentOpeningToken.isAlternator) {
- alternator = openenings.pop();
- for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
- openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
- currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
- }
- } else insertTestDefinition(currentToken, m);
- }
- function reverseTokens(maskToken) {
- function reverseStatic(st) {
- return st === opts.optionalmarker.start ? st = opts.optionalmarker.end : st === opts.optionalmarker.end ? st = opts.optionalmarker.start : st === opts.groupmarker.start ? st = opts.groupmarker.end : st === opts.groupmarker.end && (st = opts.groupmarker.start),
- st;
- }
- maskToken.matches = maskToken.matches.reverse();
- for (var match in maskToken.matches) if (maskToken.matches.hasOwnProperty(match)) {
- var intMatch = parseInt(match);
- if (maskToken.matches[match].isQuantifier && maskToken.matches[intMatch + 1] && maskToken.matches[intMatch + 1].isGroup) {
- var qt = maskToken.matches[match];
- maskToken.matches.splice(match, 1), maskToken.matches.splice(intMatch + 1, 0, qt);
- }
- void 0 !== maskToken.matches[match].matches ? maskToken.matches[match] = reverseTokens(maskToken.matches[match]) : maskToken.matches[match] = reverseStatic(maskToken.matches[match]);
- }
- return maskToken;
- }
- for (var match, m, openingToken, currentOpeningToken, alternator, lastMatch, groupToken, tokenizer = /(?:[?*+]|\{[0-9\+\*]+(?:,[0-9\+\*]*)?\})|[^.?*+^${[]()|\\]+|./g, escaped = !1, currentToken = new MaskToken(), openenings = [], maskTokens = []; match = tokenizer.exec(mask); ) if (m = match[0],
- escaped) defaultCase(); else switch (m.charAt(0)) {
- case opts.escapeChar:
- escaped = !0;
- break;
-
- case opts.optionalmarker.end:
- case opts.groupmarker.end:
- if (openingToken = openenings.pop(), openingToken.openGroup = !1, void 0 !== openingToken) if (openenings.length > 0) {
- if (currentOpeningToken = openenings[openenings.length - 1], currentOpeningToken.matches.push(openingToken),
- currentOpeningToken.isAlternator) {
- alternator = openenings.pop();
- for (var mndx = 0; mndx < alternator.matches.length; mndx++) alternator.matches[mndx].isGroup = !1;
- openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
- currentOpeningToken.matches.push(alternator)) : currentToken.matches.push(alternator);
- }
- } else currentToken.matches.push(openingToken); else defaultCase();
- break;
-
- case opts.optionalmarker.start:
- openenings.push(new MaskToken((!1), (!0)));
- break;
-
- case opts.groupmarker.start:
- openenings.push(new MaskToken((!0)));
- break;
-
- case opts.quantifiermarker.start:
- var quantifier = new MaskToken((!1), (!1), (!0));
- m = m.replace(/[{}]/g, "");
- var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
- if ("*" !== mq1 && "+" !== mq1 || (mq0 = "*" === mq1 ? 0 : 1), quantifier.quantifier = {
- min: mq0,
- max: mq1
- }, openenings.length > 0) {
- var matches = openenings[openenings.length - 1].matches;
- match = matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)), groupToken.matches.push(match),
- match = groupToken), matches.push(match), matches.push(quantifier);
- } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new MaskToken((!0)),
- groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match),
- currentToken.matches.push(quantifier);
- break;
-
- case opts.alternatormarker:
- openenings.length > 0 ? (currentOpeningToken = openenings[openenings.length - 1],
- lastMatch = currentOpeningToken.matches.pop()) : lastMatch = currentToken.matches.pop(),
- lastMatch.isAlternator ? openenings.push(lastMatch) : (alternator = new MaskToken((!1), (!1), (!1), (!0)),
- alternator.matches.push(lastMatch), openenings.push(alternator));
- break;
-
- default:
- defaultCase();
- }
- for (;openenings.length > 0; ) openingToken = openenings.pop(), currentToken.matches.push(openingToken);
- return currentToken.matches.length > 0 && (verifyGroupMarker(currentToken), maskTokens.push(currentToken)),
- opts.numericInput && reverseTokens(maskTokens[0]), maskTokens;
- }
- }, Inputmask.extendDefaults = function(options) {
- $.extend(!0, Inputmask.prototype.defaults, options);
- }, Inputmask.extendDefinitions = function(definition) {
- $.extend(!0, Inputmask.prototype.definitions, definition);
- }, Inputmask.extendAliases = function(alias) {
- $.extend(!0, Inputmask.prototype.aliases, alias);
- }, Inputmask.format = function(value, options, metadata) {
- return Inputmask(options).format(value, metadata);
- }, Inputmask.unmask = function(value, options) {
- return Inputmask(options).unmaskedvalue(value);
- }, Inputmask.isValid = function(value, options) {
- return Inputmask(options).isValid(value);
- }, Inputmask.remove = function(elems) {
- $.each(elems, function(ndx, el) {
- el.inputmask && el.inputmask.remove();
- });
- }, Inputmask.escapeRegex = function(str) {
- var specials = [ "/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\", "$", "^" ];
- return str.replace(new RegExp("(\\" + specials.join("|\\") + ")", "gim"), "\\$1");
- }, Inputmask.keyCode = {
- ALT: 18,
- BACKSPACE: 8,
- BACKSPACE_SAFARI: 127,
- CAPS_LOCK: 20,
- COMMA: 188,
- COMMAND: 91,
- COMMAND_LEFT: 91,
- COMMAND_RIGHT: 93,
- CONTROL: 17,
- DELETE: 46,
- DOWN: 40,
- END: 35,
- ENTER: 13,
- ESCAPE: 27,
- HOME: 36,
- INSERT: 45,
- LEFT: 37,
- MENU: 93,
- NUMPAD_ADD: 107,
- NUMPAD_DECIMAL: 110,
- NUMPAD_DIVIDE: 111,
- NUMPAD_ENTER: 108,
- NUMPAD_MULTIPLY: 106,
- NUMPAD_SUBTRACT: 109,
- PAGE_DOWN: 34,
- PAGE_UP: 33,
- PERIOD: 190,
- RIGHT: 39,
- SHIFT: 16,
- SPACE: 32,
- TAB: 9,
- UP: 38,
- WINDOWS: 91,
- X: 88
- }, window.Inputmask = Inputmask, Inputmask;
-}(jQuery), function($, Inputmask) {
- return void 0 === $.fn.inputmask && ($.fn.inputmask = function(fn, options) {
- var nptmask, input = this[0];
- if (void 0 === options && (options = {}), "string" == typeof fn) switch (fn) {
- case "unmaskedvalue":
- return input && input.inputmask ? input.inputmask.unmaskedvalue() : $(input).val();
-
- case "remove":
- return this.each(function() {
- this.inputmask && this.inputmask.remove();
- });
-
- case "getemptymask":
- return input && input.inputmask ? input.inputmask.getemptymask() : "";
-
- case "hasMaskedValue":
- return !(!input || !input.inputmask) && input.inputmask.hasMaskedValue();
-
- case "isComplete":
- return !input || !input.inputmask || input.inputmask.isComplete();
-
- case "getmetadata":
- return input && input.inputmask ? input.inputmask.getmetadata() : void 0;
-
- case "setvalue":
- $(input).val(options), input && void 0 === input.inputmask && $(input).triggerHandler("setvalue");
- break;
-
- case "option":
- if ("string" != typeof options) return this.each(function() {
- if (void 0 !== this.inputmask) return this.inputmask.option(options);
- });
- if (input && void 0 !== input.inputmask) return input.inputmask.option(options);
- break;
-
- default:
- return options.alias = fn, nptmask = new Inputmask(options), this.each(function() {
- nptmask.mask(this);
- });
- } else {
- if ("object" == typeof fn) return nptmask = new Inputmask(fn), void 0 === fn.mask && void 0 === fn.alias ? this.each(function() {
- return void 0 !== this.inputmask ? this.inputmask.option(fn) : void nptmask.mask(this);
- }) : this.each(function() {
- nptmask.mask(this);
- });
- if (void 0 === fn) return this.each(function() {
- nptmask = new Inputmask(options), nptmask.mask(this);
- });
- }
- }), $.fn.inputmask;
-}(jQuery, Inputmask), function($, Inputmask) {
- function isLeapYear(year) {
- return isNaN(year) || 29 === new Date(year, 2, 0).getDate();
- }
- return Inputmask.extendAliases({
- "dd/mm/yyyy": {
- mask: "1/2/y",
- placeholder: "dd/mm/yyyy",
- regex: {
- val1pre: new RegExp("[0-3]"),
- val1: new RegExp("0[1-9]|[12][0-9]|3[01]"),
- val2pre: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|[12][0-9]|3[01])" + escapedSeparator + "[01])");
- },
- val2: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|[12][0-9])" + escapedSeparator + "(0[1-9]|1[012]))|(30" + escapedSeparator + "(0[13-9]|1[012]))|(31" + escapedSeparator + "(0[13578]|1[02]))");
- }
- },
- leapday: "29/02/",
- separator: "/",
- yearrange: {
- minyear: 1900,
- maxyear: 2099
- },
- isInYearRange: function(chrs, minyear, maxyear) {
- if (isNaN(chrs)) return !1;
- var enteredyear = parseInt(chrs.concat(minyear.toString().slice(chrs.length))), enteredyear2 = parseInt(chrs.concat(maxyear.toString().slice(chrs.length)));
- return !isNaN(enteredyear) && (minyear <= enteredyear && enteredyear <= maxyear) || !isNaN(enteredyear2) && (minyear <= enteredyear2 && enteredyear2 <= maxyear);
- },
- determinebaseyear: function(minyear, maxyear, hint) {
- var currentyear = new Date().getFullYear();
- if (minyear > currentyear) return minyear;
- if (maxyear < currentyear) {
- for (var maxYearPrefix = maxyear.toString().slice(0, 2), maxYearPostfix = maxyear.toString().slice(2, 4); maxyear < maxYearPrefix + hint; ) maxYearPrefix--;
- var maxxYear = maxYearPrefix + maxYearPostfix;
- return minyear > maxxYear ? minyear : maxxYear;
- }
- if (minyear <= currentyear && currentyear <= maxyear) {
- for (var currentYearPrefix = currentyear.toString().slice(0, 2); maxyear < currentYearPrefix + hint; ) currentYearPrefix--;
- var currentYearAndHint = currentYearPrefix + hint;
- return currentYearAndHint < minyear ? minyear : currentYearAndHint;
- }
- return currentyear;
- },
- onKeyDown: function(e, buffer, caretPos, opts) {
- var $input = $(this);
- if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
- var today = new Date();
- $input.val(today.getDate().toString() + (today.getMonth() + 1).toString() + today.getFullYear().toString()),
- $input.trigger("setvalue");
- }
- },
- getFrontValue: function(mask, buffer, opts) {
- for (var start = 0, length = 0, i = 0; i < mask.length && "2" !== mask.charAt(i); i++) {
- var definition = opts.definitions[mask.charAt(i)];
- definition ? (start += length, length = definition.cardinality) : length++;
- }
- return buffer.join("").substr(start, length);
- },
- postValidation: function(buffer, currentResult, opts) {
- var dayMonthValue, year, bufferStr = buffer.join("");
- return 0 === opts.mask.indexOf("y") ? (year = bufferStr.substr(0, 4), dayMonthValue = bufferStr.substr(4, 11)) : (year = bufferStr.substr(6, 11),
- dayMonthValue = bufferStr.substr(0, 6)), currentResult && (dayMonthValue !== opts.leapday || isLeapYear(year));
- },
- definitions: {
- "1": {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.regex.val1.test(chrs);
- return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val1.test("0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
- {
- refreshFromBuffer: {
- start: pos - 1,
- end: pos
- },
- pos: pos,
- c: chrs.charAt(0)
- });
- },
- cardinality: 2,
- prevalidator: [ {
- validator: function(chrs, maskset, pos, strict, opts) {
- var pchrs = chrs;
- isNaN(maskset.buffer[pos + 1]) || (pchrs += maskset.buffer[pos + 1]);
- var isValid = 1 === pchrs.length ? opts.regex.val1pre.test(pchrs) : opts.regex.val1.test(pchrs);
- if (!strict && !isValid) {
- if (isValid = opts.regex.val1.test(chrs + "0")) return maskset.buffer[pos] = chrs,
- maskset.buffer[++pos] = "0", {
- pos: pos,
- c: "0"
- };
- if (isValid = opts.regex.val1.test("0" + chrs)) return maskset.buffer[pos] = "0",
- pos++, {
- pos: pos
- };
- }
- return isValid;
- },
- cardinality: 1
- } ]
- },
- "2": {
- validator: function(chrs, maskset, pos, strict, opts) {
- var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
- frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator);
- var isValid = opts.regex.val2(opts.separator).test(frontValue + chrs);
- return strict || isValid || chrs.charAt(1) !== opts.separator && "-./".indexOf(chrs.charAt(1)) === -1 || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs.charAt(0))) ? isValid : (maskset.buffer[pos - 1] = "0",
- {
- refreshFromBuffer: {
- start: pos - 1,
- end: pos
- },
- pos: pos,
- c: chrs.charAt(0)
- });
- },
- cardinality: 2,
- prevalidator: [ {
- validator: function(chrs, maskset, pos, strict, opts) {
- isNaN(maskset.buffer[pos + 1]) || (chrs += maskset.buffer[pos + 1]);
- var frontValue = opts.getFrontValue(maskset.mask, maskset.buffer, opts);
- frontValue.indexOf(opts.placeholder[0]) !== -1 && (frontValue = "01" + opts.separator);
- var isValid = 1 === chrs.length ? opts.regex.val2pre(opts.separator).test(frontValue + chrs) : opts.regex.val2(opts.separator).test(frontValue + chrs);
- return strict || isValid || !(isValid = opts.regex.val2(opts.separator).test(frontValue + "0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
- pos++, {
- pos: pos
- });
- },
- cardinality: 1
- } ]
- },
- y: {
- validator: function(chrs, maskset, pos, strict, opts) {
- return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
- },
- cardinality: 4,
- prevalidator: [ {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
- if (!strict && !isValid) {
- var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 1);
- if (isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
- {
- pos: pos
- };
- if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs + "0").toString().slice(0, 2),
- isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(0),
- maskset.buffer[pos++] = yearPrefix.charAt(1), {
- pos: pos
- };
- }
- return isValid;
- },
- cardinality: 1
- }, {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
- if (!strict && !isValid) {
- var yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2);
- if (isValid = opts.isInYearRange(chrs[0] + yearPrefix[1] + chrs[1], opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos++] = yearPrefix.charAt(1),
- {
- pos: pos
- };
- if (yearPrefix = opts.determinebaseyear(opts.yearrange.minyear, opts.yearrange.maxyear, chrs).toString().slice(0, 2),
- isValid = opts.isInYearRange(yearPrefix + chrs, opts.yearrange.minyear, opts.yearrange.maxyear)) return maskset.buffer[pos - 1] = yearPrefix.charAt(0),
- maskset.buffer[pos++] = yearPrefix.charAt(1), maskset.buffer[pos++] = chrs.charAt(0),
- {
- refreshFromBuffer: {
- start: pos - 3,
- end: pos
- },
- pos: pos
- };
- }
- return isValid;
- },
- cardinality: 2
- }, {
- validator: function(chrs, maskset, pos, strict, opts) {
- return opts.isInYearRange(chrs, opts.yearrange.minyear, opts.yearrange.maxyear);
- },
- cardinality: 3
- } ]
- }
- },
- insertMode: !1,
- autoUnmask: !1
- },
- "mm/dd/yyyy": {
- placeholder: "mm/dd/yyyy",
- alias: "dd/mm/yyyy",
- regex: {
- val2pre: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
- },
- val2: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
- },
- val1pre: new RegExp("[01]"),
- val1: new RegExp("0[1-9]|1[012]")
- },
- leapday: "02/29/",
- onKeyDown: function(e, buffer, caretPos, opts) {
- var $input = $(this);
- if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
- var today = new Date();
- $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
- $input.trigger("setvalue");
- }
- }
- },
- "yyyy/mm/dd": {
- mask: "y/1/2",
- placeholder: "yyyy/mm/dd",
- alias: "mm/dd/yyyy",
- leapday: "/02/29",
- onKeyDown: function(e, buffer, caretPos, opts) {
- var $input = $(this);
- if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
- var today = new Date();
- $input.val(today.getFullYear().toString() + (today.getMonth() + 1).toString() + today.getDate().toString()),
- $input.trigger("setvalue");
- }
- }
- },
- "dd.mm.yyyy": {
- mask: "1.2.y",
- placeholder: "dd.mm.yyyy",
- leapday: "29.02.",
- separator: ".",
- alias: "dd/mm/yyyy"
- },
- "dd-mm-yyyy": {
- mask: "1-2-y",
- placeholder: "dd-mm-yyyy",
- leapday: "29-02-",
- separator: "-",
- alias: "dd/mm/yyyy"
- },
- "mm.dd.yyyy": {
- mask: "1.2.y",
- placeholder: "mm.dd.yyyy",
- leapday: "02.29.",
- separator: ".",
- alias: "mm/dd/yyyy"
- },
- "mm-dd-yyyy": {
- mask: "1-2-y",
- placeholder: "mm-dd-yyyy",
- leapday: "02-29-",
- separator: "-",
- alias: "mm/dd/yyyy"
- },
- "yyyy.mm.dd": {
- mask: "y.1.2",
- placeholder: "yyyy.mm.dd",
- leapday: ".02.29",
- separator: ".",
- alias: "yyyy/mm/dd"
- },
- "yyyy-mm-dd": {
- mask: "y-1-2",
- placeholder: "yyyy-mm-dd",
- leapday: "-02-29",
- separator: "-",
- alias: "yyyy/mm/dd"
- },
- datetime: {
- mask: "1/2/y h:s",
- placeholder: "dd/mm/yyyy hh:mm",
- alias: "dd/mm/yyyy",
- regex: {
- hrspre: new RegExp("[012]"),
- hrs24: new RegExp("2[0-4]|1[3-9]"),
- hrs: new RegExp("[01][0-9]|2[0-4]"),
- ampm: new RegExp("^[a|p|A|P][m|M]"),
- mspre: new RegExp("[0-5]"),
- ms: new RegExp("[0-5][0-9]")
- },
- timeseparator: ":",
- hourFormat: "24",
- definitions: {
- h: {
- validator: function(chrs, maskset, pos, strict, opts) {
- if ("24" === opts.hourFormat && 24 === parseInt(chrs, 10)) return maskset.buffer[pos - 1] = "0",
- maskset.buffer[pos] = "0", {
- refreshFromBuffer: {
- start: pos - 1,
- end: pos
- },
- c: "0"
- };
- var isValid = opts.regex.hrs.test(chrs);
- if (!strict && !isValid && (chrs.charAt(1) === opts.timeseparator || "-.:".indexOf(chrs.charAt(1)) !== -1) && (isValid = opts.regex.hrs.test("0" + chrs.charAt(0)))) return maskset.buffer[pos - 1] = "0",
- maskset.buffer[pos] = chrs.charAt(0), pos++, {
- refreshFromBuffer: {
- start: pos - 2,
- end: pos
- },
- pos: pos,
- c: opts.timeseparator
- };
- if (isValid && "24" !== opts.hourFormat && opts.regex.hrs24.test(chrs)) {
- var tmp = parseInt(chrs, 10);
- return 24 === tmp ? (maskset.buffer[pos + 5] = "a", maskset.buffer[pos + 6] = "m") : (maskset.buffer[pos + 5] = "p",
- maskset.buffer[pos + 6] = "m"), tmp -= 12, tmp < 10 ? (maskset.buffer[pos] = tmp.toString(),
- maskset.buffer[pos - 1] = "0") : (maskset.buffer[pos] = tmp.toString().charAt(1),
- maskset.buffer[pos - 1] = tmp.toString().charAt(0)), {
- refreshFromBuffer: {
- start: pos - 1,
- end: pos + 6
- },
- c: maskset.buffer[pos]
- };
- }
- return isValid;
- },
- cardinality: 2,
- prevalidator: [ {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.regex.hrspre.test(chrs);
- return strict || isValid || !(isValid = opts.regex.hrs.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
- pos++, {
- pos: pos
- });
- },
- cardinality: 1
- } ]
- },
- s: {
- validator: "[0-5][0-9]",
- cardinality: 2,
- prevalidator: [ {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.regex.mspre.test(chrs);
- return strict || isValid || !(isValid = opts.regex.ms.test("0" + chrs)) ? isValid : (maskset.buffer[pos] = "0",
- pos++, {
- pos: pos
- });
- },
- cardinality: 1
- } ]
- },
- t: {
- validator: function(chrs, maskset, pos, strict, opts) {
- return opts.regex.ampm.test(chrs + "m");
- },
- casing: "lower",
- cardinality: 1
- }
- },
- insertMode: !1,
- autoUnmask: !1
- },
- datetime12: {
- mask: "1/2/y h:s t\\m",
- placeholder: "dd/mm/yyyy hh:mm xm",
- alias: "datetime",
- hourFormat: "12"
- },
- "mm/dd/yyyy hh:mm xm": {
- mask: "1/2/y h:s t\\m",
- placeholder: "mm/dd/yyyy hh:mm xm",
- alias: "datetime12",
- regex: {
- val2pre: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
- },
- val2: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
- },
- val1pre: new RegExp("[01]"),
- val1: new RegExp("0[1-9]|1[012]")
- },
- leapday: "02/29/",
- onKeyDown: function(e, buffer, caretPos, opts) {
- var $input = $(this);
- if (e.ctrlKey && e.keyCode === Inputmask.keyCode.RIGHT) {
- var today = new Date();
- $input.val((today.getMonth() + 1).toString() + today.getDate().toString() + today.getFullYear().toString()),
- $input.trigger("setvalue");
- }
- }
- },
- "hh:mm t": {
- mask: "h:s t\\m",
- placeholder: "hh:mm xm",
- alias: "datetime",
- hourFormat: "12"
- },
- "h:s t": {
- mask: "h:s t\\m",
- placeholder: "hh:mm xm",
- alias: "datetime",
- hourFormat: "12"
- },
- "hh:mm:ss": {
- mask: "h:s:s",
- placeholder: "hh:mm:ss",
- alias: "datetime",
- autoUnmask: !1
- },
- "hh:mm": {
- mask: "h:s",
- placeholder: "hh:mm",
- alias: "datetime",
- autoUnmask: !1
- },
- date: {
- alias: "dd/mm/yyyy"
- },
- "mm/yyyy": {
- mask: "1/y",
- placeholder: "mm/yyyy",
- leapday: "donotuse",
- separator: "/",
- alias: "mm/dd/yyyy"
- },
- shamsi: {
- regex: {
- val2pre: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "[0-3])");
- },
- val2: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[1-9]|1[012])" + escapedSeparator + "30)|((0[1-6])" + escapedSeparator + "31)");
- },
- val1pre: new RegExp("[01]"),
- val1: new RegExp("0[1-9]|1[012]")
- },
- yearrange: {
- minyear: 1300,
- maxyear: 1499
- },
- mask: "y/1/2",
- leapday: "/12/30",
- placeholder: "yyyy/mm/dd",
- alias: "mm/dd/yyyy",
- clearIncomplete: !0
- },
- "yyyy-mm-dd hh:mm:ss": {
- mask: "y-1-2 h:s:s",
- placeholder: "yyyy-mm-dd hh:mm:ss",
- alias: "datetime",
- separator: "-",
- leapday: "-02-29",
- regex: {
- val2pre: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[13-9]|1[012])" + escapedSeparator + "[0-3])|(02" + escapedSeparator + "[0-2])");
- },
- val2: function(separator) {
- var escapedSeparator = Inputmask.escapeRegex.call(this, separator);
- return new RegExp("((0[1-9]|1[012])" + escapedSeparator + "(0[1-9]|[12][0-9]))|((0[13-9]|1[012])" + escapedSeparator + "30)|((0[13578]|1[02])" + escapedSeparator + "31)");
- },
- val1pre: new RegExp("[01]"),
- val1: new RegExp("0[1-9]|1[012]")
- },
- onKeyDown: function(e, buffer, caretPos, opts) {}
- }
- }), Inputmask;
-}(jQuery, Inputmask), function($, Inputmask) {
- return Inputmask.extendDefinitions({
- A: {
- validator: "[A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
- cardinality: 1,
- casing: "upper"
- },
- "&": {
- validator: "[0-9A-Za-z\u0410-\u044f\u0401\u0451\xc0-\xff\xb5]",
- cardinality: 1,
- casing: "upper"
- },
- "#": {
- validator: "[0-9A-Fa-f]",
- cardinality: 1,
- casing: "upper"
- }
- }), Inputmask.extendAliases({
- url: {
- definitions: {
- i: {
- validator: ".",
- cardinality: 1
- }
- },
- mask: "(\\http://)|(\\http\\s://)|(ftp://)|(ftp\\s://)i{+}",
- insertMode: !1,
- autoUnmask: !1,
- inputmode: "url"
- },
- ip: {
- mask: "i[i[i]].i[i[i]].i[i[i]].i[i[i]]",
- definitions: {
- i: {
- validator: function(chrs, maskset, pos, strict, opts) {
- return pos - 1 > -1 && "." !== maskset.buffer[pos - 1] ? (chrs = maskset.buffer[pos - 1] + chrs,
- chrs = pos - 2 > -1 && "." !== maskset.buffer[pos - 2] ? maskset.buffer[pos - 2] + chrs : "0" + chrs) : chrs = "00" + chrs,
- new RegExp("25[0-5]|2[0-4][0-9]|[01][0-9][0-9]").test(chrs);
- },
- cardinality: 1
- }
- },
- onUnMask: function(maskedValue, unmaskedValue, opts) {
- return maskedValue;
- },
- inputmode: "numeric"
- },
- email: {
- mask: "*{1,64}[.*{1,64}][.*{1,64}][.*{1,63}]@-{1,63}.-{1,63}[.-{1,63}][.-{1,63}]",
- greedy: !1,
- onBeforePaste: function(pastedValue, opts) {
- return pastedValue = pastedValue.toLowerCase(), pastedValue.replace("mailto:", "");
- },
- definitions: {
- "*": {
- validator: "[0-9A-Za-z!#$%&'*+/=?^_`{|}~-]",
- cardinality: 1,
- casing: "lower"
- },
- "-": {
- validator: "[0-9A-Za-z-]",
- cardinality: 1,
- casing: "lower"
- }
- },
- onUnMask: function(maskedValue, unmaskedValue, opts) {
- return maskedValue;
- },
- inputmode: "email"
- },
- mac: {
- mask: "##:##:##:##:##:##"
- },
- vin: {
- mask: "V{13}9{4}",
- definitions: {
- V: {
- validator: "[A-HJ-NPR-Za-hj-npr-z\\d]",
- cardinality: 1,
- casing: "upper"
- }
- },
- clearIncomplete: !0,
- autoUnmask: !0
- }
- }), Inputmask;
-}(jQuery, Inputmask), function($, Inputmask) {
- return Inputmask.extendAliases({
- numeric: {
- mask: function(opts) {
- function autoEscape(txt) {
- for (var escapedTxt = "", i = 0; i < txt.length; i++) escapedTxt += opts.definitions[txt.charAt(i)] || opts.optionalmarker.start === txt.charAt(i) || opts.optionalmarker.end === txt.charAt(i) || opts.quantifiermarker.start === txt.charAt(i) || opts.quantifiermarker.end === txt.charAt(i) || opts.groupmarker.start === txt.charAt(i) || opts.groupmarker.end === txt.charAt(i) || opts.alternatormarker === txt.charAt(i) ? "\\" + txt.charAt(i) : txt.charAt(i);
- return escapedTxt;
- }
- if (0 !== opts.repeat && isNaN(opts.integerDigits) && (opts.integerDigits = opts.repeat),
- opts.repeat = 0, opts.groupSeparator === opts.radixPoint && ("." === opts.radixPoint ? opts.groupSeparator = "," : "," === opts.radixPoint ? opts.groupSeparator = "." : opts.groupSeparator = ""),
- " " === opts.groupSeparator && (opts.skipOptionalPartCharacter = void 0), opts.autoGroup = opts.autoGroup && "" !== opts.groupSeparator,
- opts.autoGroup && ("string" == typeof opts.groupSize && isFinite(opts.groupSize) && (opts.groupSize = parseInt(opts.groupSize)),
- isFinite(opts.integerDigits))) {
- var seps = Math.floor(opts.integerDigits / opts.groupSize), mod = opts.integerDigits % opts.groupSize;
- opts.integerDigits = parseInt(opts.integerDigits) + (0 === mod ? seps - 1 : seps),
- opts.integerDigits < 1 && (opts.integerDigits = "*");
- }
- opts.placeholder.length > 1 && (opts.placeholder = opts.placeholder.charAt(0)),
- "radixFocus" === opts.positionCaretOnClick && "" === opts.placeholder && opts.integerOptional === !1 && (opts.positionCaretOnClick = "lvp"),
- opts.definitions[";"] = opts.definitions["~"], opts.definitions[";"].definitionSymbol = "~",
- opts.numericInput === !0 && (opts.positionCaretOnClick = "radixFocus" === opts.positionCaretOnClick ? "lvp" : opts.positionCaretOnClick,
- opts.digitsOptional = !1, isNaN(opts.digits) && (opts.digits = 2), opts.decimalProtect = !1);
- var mask = "[+]";
- if (mask += autoEscape(opts.prefix), mask += opts.integerOptional === !0 ? "~{1," + opts.integerDigits + "}" : "~{" + opts.integerDigits + "}",
- void 0 !== opts.digits) {
- opts.radixPointDefinitionSymbol = opts.decimalProtect ? ":" : opts.radixPoint;
- var dq = opts.digits.toString().split(",");
- isFinite(dq[0] && dq[1] && isFinite(dq[1])) ? mask += opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}" : (isNaN(opts.digits) || parseInt(opts.digits) > 0) && (mask += opts.digitsOptional ? "[" + opts.radixPointDefinitionSymbol + ";{1," + opts.digits + "}]" : opts.radixPointDefinitionSymbol + ";{" + opts.digits + "}");
- }
- return mask += autoEscape(opts.suffix), mask += "[-]", opts.greedy = !1, null !== opts.min && (opts.min = opts.min.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- "," === opts.radixPoint && (opts.min = opts.min.replace(opts.radixPoint, "."))),
- null !== opts.max && (opts.max = opts.max.toString().replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- "," === opts.radixPoint && (opts.max = opts.max.replace(opts.radixPoint, "."))),
- mask;
- },
- placeholder: "",
- greedy: !1,
- digits: "*",
- digitsOptional: !0,
- radixPoint: ".",
- positionCaretOnClick: "radixFocus",
- groupSize: 3,
- groupSeparator: "",
- autoGroup: !1,
- allowPlus: !0,
- allowMinus: !0,
- negationSymbol: {
- front: "-",
- back: ""
- },
- integerDigits: "+",
- integerOptional: !0,
- prefix: "",
- suffix: "",
- rightAlign: !0,
- decimalProtect: !0,
- min: null,
- max: null,
- step: 1,
- insertMode: !0,
- autoUnmask: !1,
- unmaskAsNumber: !1,
- inputmode: "numeric",
- postFormat: function(buffer, pos, opts) {
- opts.numericInput === !0 && (buffer = buffer.reverse(), isFinite(pos) && (pos = buffer.join("").length - pos - 1));
- var i, l;
- pos = pos >= buffer.length ? buffer.length - 1 : pos < 0 ? 0 : pos;
- var charAtPos = buffer[pos], cbuf = buffer.slice();
- charAtPos === opts.groupSeparator && pos > opts.prefix.length && pos < buffer.length - opts.suffix.length && (cbuf.splice(pos--, 1),
- charAtPos = cbuf[pos]);
- var isNegative = cbuf.join("").match(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)));
- isNegative = null !== isNegative && 1 === isNegative.length, pos > (isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length && pos < cbuf.length - opts.suffix.length && (cbuf[pos] = "!");
- var bufVal = cbuf.join(""), bufValOrigin = cbuf.join();
- if (isNegative && (bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.negationSymbol.front)), ""),
- bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), "")),
- bufVal = bufVal.replace(new RegExp(Inputmask.escapeRegex(opts.suffix) + "$"), ""),
- bufVal = bufVal.replace(new RegExp("^" + Inputmask.escapeRegex(opts.prefix)), ""),
- bufVal.length > 0 && opts.autoGroup || bufVal.indexOf(opts.groupSeparator) !== -1) {
- var escapedGroupSeparator = Inputmask.escapeRegex(opts.groupSeparator);
- bufVal = bufVal.replace(new RegExp(escapedGroupSeparator, "g"), "");
- var radixSplit = bufVal.split(charAtPos === opts.radixPoint ? "!" : opts.radixPoint);
- if (bufVal = "" === opts.radixPoint ? bufVal : radixSplit[0], charAtPos !== opts.negationSymbol.front && (bufVal = bufVal.replace("!", "?")),
- bufVal.length > opts.groupSize) for (var reg = new RegExp("([-+]?[\\d?]+)([\\d?]{" + opts.groupSize + "})"); reg.test(bufVal) && "" !== opts.groupSeparator; ) bufVal = bufVal.replace(reg, "$1" + opts.groupSeparator + "$2"),
- bufVal = bufVal.replace(opts.groupSeparator + opts.groupSeparator, opts.groupSeparator);
- bufVal = bufVal.replace("?", "!"), "" !== opts.radixPoint && radixSplit.length > 1 && (bufVal += (charAtPos === opts.radixPoint ? "!" : opts.radixPoint) + radixSplit[1]);
- }
- bufVal = opts.prefix + bufVal + opts.suffix, isNegative && (bufVal = opts.negationSymbol.front + bufVal + opts.negationSymbol.back);
- var needsRefresh = bufValOrigin !== bufVal.split("").join(), newPos = $.inArray("!", bufVal);
- if (newPos === -1 && (newPos = pos), needsRefresh) {
- for (buffer.length = bufVal.length, i = 0, l = bufVal.length; i < l; i++) buffer[i] = bufVal.charAt(i);
- buffer[newPos] = charAtPos;
- }
- return newPos = opts.numericInput && isFinite(pos) ? buffer.join("").length - newPos - 1 : newPos,
- opts.numericInput && (buffer = buffer.reverse(), $.inArray(opts.radixPoint, buffer) < newPos && buffer.join("").length - opts.suffix.length !== newPos && (newPos -= 1)),
- {
- pos: newPos,
- refreshFromBuffer: needsRefresh,
- buffer: buffer,
- isNegative: isNegative
- };
- },
- onBeforeWrite: function(e, buffer, caretPos, opts) {
- var rslt;
- if (e && ("blur" === e.type || "checkval" === e.type || "keydown" === e.type)) {
- var maskedValue = opts.numericInput ? buffer.slice().reverse().join("") : buffer.join(""), processValue = maskedValue.replace(opts.prefix, "");
- processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- "," === opts.radixPoint && (processValue = processValue.replace(opts.radixPoint, "."));
- var isNegative = processValue.match(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"));
- if (isNegative = null !== isNegative && 1 === isNegative.length, processValue = processValue.replace(new RegExp("[-" + Inputmask.escapeRegex(opts.negationSymbol.front) + "]", "g"), ""),
- processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.negationSymbol.back) + "$"), ""),
- isNaN(opts.placeholder) && (processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.placeholder), "g"), "")),
- processValue = processValue === opts.negationSymbol.front ? processValue + "0" : processValue,
- "" !== processValue && isFinite(processValue)) {
- var floatValue = parseFloat(processValue), signedFloatValue = isNegative ? floatValue * -1 : floatValue;
- if ("blur" === e.type && (null !== opts.min && isFinite(opts.min) && signedFloatValue < parseFloat(opts.min) ? (floatValue = Math.abs(opts.min),
- isNegative = opts.min < 0, maskedValue = void 0) : null !== opts.max && isFinite(opts.max) && signedFloatValue > parseFloat(opts.max) && (floatValue = Math.abs(opts.max),
- isNegative = opts.max < 0, maskedValue = void 0)), processValue = floatValue.toString().replace(".", opts.radixPoint).split(""),
- isFinite(opts.digits)) {
- var radixPosition = $.inArray(opts.radixPoint, processValue), rpb = $.inArray(opts.radixPoint, maskedValue);
- radixPosition === -1 && (processValue.push(opts.radixPoint), radixPosition = processValue.length - 1);
- for (var i = 1; i <= opts.digits; i++) opts.digitsOptional || void 0 !== processValue[radixPosition + i] && processValue[radixPosition + i] !== opts.placeholder.charAt(0) ? rpb !== -1 && void 0 !== maskedValue[rpb + i] && (processValue[radixPosition + i] = processValue[radixPosition + i] || maskedValue[rpb + i]) : processValue[radixPosition + i] = "0";
- processValue[processValue.length - 1] === opts.radixPoint && delete processValue[processValue.length - 1];
- }
- if (floatValue.toString() !== processValue && floatValue.toString() + "." !== processValue || isNegative) return processValue = (opts.prefix + processValue.join("")).split(""),
- !isNegative || 0 === floatValue && "blur" === e.type || (processValue.unshift(opts.negationSymbol.front),
- processValue.push(opts.negationSymbol.back)), opts.numericInput && (processValue = processValue.reverse()),
- rslt = opts.postFormat(processValue, opts.numericInput ? caretPos : caretPos - 1, opts),
- rslt.buffer && (rslt.refreshFromBuffer = rslt.buffer.join("") !== buffer.join("")),
- rslt;
- }
- }
- if (opts.autoGroup) return rslt = opts.postFormat(buffer, opts.numericInput ? caretPos : caretPos - 1, opts),
- rslt.caret = caretPos < (rslt.isNegative ? opts.negationSymbol.front.length : 0) + opts.prefix.length || caretPos > rslt.buffer.length - (rslt.isNegative ? opts.negationSymbol.back.length : 0) ? rslt.pos : rslt.pos + 1,
- rslt;
- },
- regex: {
- integerPart: function(opts) {
- return new RegExp("[" + Inputmask.escapeRegex(opts.negationSymbol.front) + "+]?\\d+");
- },
- integerNPart: function(opts) {
- return new RegExp("[\\d" + Inputmask.escapeRegex(opts.groupSeparator) + Inputmask.escapeRegex(opts.placeholder.charAt(0)) + "]+");
- }
- },
- signHandler: function(chrs, maskset, pos, strict, opts) {
- if (!strict && opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) {
- var matchRslt = maskset.buffer.join("").match(opts.regex.integerPart(opts));
- if (matchRslt && matchRslt[0].length > 0) return maskset.buffer[matchRslt.index] === ("-" === chrs ? "+" : opts.negationSymbol.front) ? "-" === chrs ? "" !== opts.negationSymbol.back ? {
- pos: 0,
- c: opts.negationSymbol.front,
- remove: 0,
- caret: pos,
- insert: {
- pos: maskset.buffer.length - 1,
- c: opts.negationSymbol.back
- }
- } : {
- pos: 0,
- c: opts.negationSymbol.front,
- remove: 0,
- caret: pos
- } : "" !== opts.negationSymbol.back ? {
- pos: 0,
- c: "+",
- remove: [ 0, maskset.buffer.length - 1 ],
- caret: pos
- } : {
- pos: 0,
- c: "+",
- remove: 0,
- caret: pos
- } : maskset.buffer[0] === ("-" === chrs ? opts.negationSymbol.front : "+") ? "-" === chrs && "" !== opts.negationSymbol.back ? {
- remove: [ 0, maskset.buffer.length - 1 ],
- caret: pos - 1
- } : {
- remove: 0,
- caret: pos - 1
- } : "-" === chrs ? "" !== opts.negationSymbol.back ? {
- pos: 0,
- c: opts.negationSymbol.front,
- caret: pos + 1,
- insert: {
- pos: maskset.buffer.length,
- c: opts.negationSymbol.back
- }
- } : {
- pos: 0,
- c: opts.negationSymbol.front,
- caret: pos + 1
- } : {
- pos: 0,
- c: chrs,
- caret: pos + 1
- };
- }
- return !1;
- },
- radixHandler: function(chrs, maskset, pos, strict, opts) {
- if (!strict && opts.numericInput !== !0 && chrs === opts.radixPoint && void 0 !== opts.digits && (isNaN(opts.digits) || parseInt(opts.digits) > 0)) {
- var radixPos = $.inArray(opts.radixPoint, maskset.buffer), integerValue = maskset.buffer.join("").match(opts.regex.integerPart(opts));
- if (radixPos !== -1 && maskset.validPositions[radixPos]) return maskset.validPositions[radixPos - 1] ? {
- caret: radixPos + 1
- } : {
- pos: integerValue.index,
- c: integerValue[0],
- caret: radixPos + 1
- };
- if (!integerValue || "0" === integerValue[0] && integerValue.index + 1 !== pos) return maskset.buffer[integerValue ? integerValue.index : pos] = "0",
- {
- pos: (integerValue ? integerValue.index : pos) + 1,
- c: opts.radixPoint
- };
- }
- return !1;
- },
- leadingZeroHandler: function(chrs, maskset, pos, strict, opts, isSelection) {
- if (!strict) {
- var initialPos = pos, buffer = opts.numericInput === !0 ? maskset.buffer.slice("").reverse() : maskset.buffer.slice("");
- opts.numericInput && (pos = buffer.join("").length - pos - 1), buffer.splice(0, opts.prefix.length),
- buffer.splice(buffer.length - opts.suffix.length, opts.suffix.length), pos -= opts.prefix.length;
- var radixPosition = $.inArray(opts.radixPoint, buffer), matchRslt = buffer.slice(0, radixPosition !== -1 ? radixPosition : void 0).join("").match(opts.regex.integerNPart(opts));
- if (matchRslt && (radixPosition === -1 || pos <= radixPosition || opts.numericInput)) {
- var decimalPart = radixPosition === -1 ? 0 : parseInt(buffer.slice(radixPosition + 1).join("")), leadingZero = 0 === matchRslt[0].indexOf("" !== opts.placeholder ? opts.placeholder.charAt(0) : "0");
- if (opts.numericInput) {
- if (leadingZero && 0 !== decimalPart && isSelection !== !0) return maskset.buffer.splice(buffer.length - matchRslt.index - 1 + opts.suffix.length, 1),
- {
- pos: initialPos,
- remove: buffer.length - matchRslt.index - 1 + opts.suffix.length
- };
- } else {
- if (leadingZero && (matchRslt.index + 1 === pos || isSelection !== !0 && 0 === decimalPart)) return maskset.buffer.splice(matchRslt.index + opts.prefix.length, 1),
- {
- pos: matchRslt.index + opts.prefix.length,
- remove: matchRslt.index + opts.prefix.length
- };
- if ("0" === chrs && pos <= matchRslt.index && matchRslt[0] !== opts.groupSeparator) return !1;
- }
- }
- }
- return !0;
- },
- definitions: {
- "~": {
- validator: function(chrs, maskset, pos, strict, opts, isSelection) {
- var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
- if (!isValid && (isValid = opts.radixHandler(chrs, maskset, pos, strict, opts),
- !isValid && (isValid = strict ? new RegExp("[0-9" + Inputmask.escapeRegex(opts.groupSeparator) + "]").test(chrs) : new RegExp("[0-9]").test(chrs),
- isValid === !0 && (isValid = opts.leadingZeroHandler(chrs, maskset, pos, strict, opts, isSelection),
- isValid === !0 && opts.numericInput !== !0)))) {
- var radixPosition = $.inArray(opts.radixPoint, maskset.buffer);
- isValid = radixPosition !== -1 && (opts.digitsOptional === !1 || maskset.validPositions[pos]) && opts.numericInput !== !0 && pos > radixPosition && !strict ? {
- pos: pos,
- remove: pos
- } : {
- pos: pos
- };
- }
- return isValid;
- },
- cardinality: 1
- },
- "+": {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
- return !isValid && (strict && opts.allowMinus && chrs === opts.negationSymbol.front || opts.allowMinus && "-" === chrs || opts.allowPlus && "+" === chrs) && (isValid = !(!strict && "-" === chrs) || ("" !== opts.negationSymbol.back ? {
- pos: pos,
- c: "-" === chrs ? opts.negationSymbol.front : "+",
- caret: pos + 1,
- insert: {
- pos: maskset.buffer.length,
- c: opts.negationSymbol.back
- }
- } : {
- pos: pos,
- c: "-" === chrs ? opts.negationSymbol.front : "+",
- caret: pos + 1
- })), isValid;
- },
- cardinality: 1,
- placeholder: ""
- },
- "-": {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
- return !isValid && strict && opts.allowMinus && chrs === opts.negationSymbol.back && (isValid = !0),
- isValid;
- },
- cardinality: 1,
- placeholder: ""
- },
- ":": {
- validator: function(chrs, maskset, pos, strict, opts) {
- var isValid = opts.signHandler(chrs, maskset, pos, strict, opts);
- if (!isValid) {
- var radix = "[" + Inputmask.escapeRegex(opts.radixPoint) + "]";
- isValid = new RegExp(radix).test(chrs), isValid && maskset.validPositions[pos] && maskset.validPositions[pos].match.placeholder === opts.radixPoint && (isValid = {
- caret: pos + 1
- });
- }
- return isValid;
- },
- cardinality: 1,
- placeholder: function(opts) {
- return opts.radixPoint;
- }
- }
- },
- onUnMask: function(maskedValue, unmaskedValue, opts) {
- if ("" === unmaskedValue && opts.nullable === !0) return unmaskedValue;
- var processValue = maskedValue.replace(opts.prefix, "");
- return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- opts.unmaskAsNumber ? ("" !== opts.radixPoint && processValue.indexOf(opts.radixPoint) !== -1 && (processValue = processValue.replace(Inputmask.escapeRegex.call(this, opts.radixPoint), ".")),
- Number(processValue)) : processValue;
- },
- isComplete: function(buffer, opts) {
- var maskedValue = buffer.join(""), bufClone = buffer.slice();
- if (opts.postFormat(bufClone, 0, opts), bufClone.join("") !== maskedValue) return !1;
- var processValue = maskedValue.replace(opts.prefix, "");
- return processValue = processValue.replace(opts.suffix, ""), processValue = processValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- "," === opts.radixPoint && (processValue = processValue.replace(Inputmask.escapeRegex(opts.radixPoint), ".")),
- isFinite(processValue);
- },
- onBeforeMask: function(initialValue, opts) {
- if (initialValue = initialValue.toString(), opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")),
- "" !== opts.radixPoint && isFinite(initialValue)) {
- var vs = initialValue.split("."), groupSize = "" !== opts.groupSeparator ? parseInt(opts.groupSize) : 0;
- 2 === vs.length && (vs[0].length > groupSize || vs[1].length > groupSize) && (initialValue = initialValue.replace(".", opts.radixPoint));
- }
- var kommaMatches = initialValue.match(/,/g), dotMatches = initialValue.match(/\./g);
- if (dotMatches && kommaMatches ? dotMatches.length > kommaMatches.length ? (initialValue = initialValue.replace(/\./g, ""),
- initialValue = initialValue.replace(",", opts.radixPoint)) : kommaMatches.length > dotMatches.length ? (initialValue = initialValue.replace(/,/g, ""),
- initialValue = initialValue.replace(".", opts.radixPoint)) : initialValue = initialValue.indexOf(".") < initialValue.indexOf(",") ? initialValue.replace(/\./g, "") : initialValue = initialValue.replace(/,/g, "") : initialValue = initialValue.replace(new RegExp(Inputmask.escapeRegex(opts.groupSeparator), "g"), ""),
- 0 === opts.digits && (initialValue.indexOf(".") !== -1 ? initialValue = initialValue.substring(0, initialValue.indexOf(".")) : initialValue.indexOf(",") !== -1 && (initialValue = initialValue.substring(0, initialValue.indexOf(",")))),
- "" !== opts.radixPoint && isFinite(opts.digits) && initialValue.indexOf(opts.radixPoint) !== -1) {
- var valueParts = initialValue.split(opts.radixPoint), decPart = valueParts[1].match(new RegExp("\\d*"))[0];
- if (parseInt(opts.digits) < decPart.toString().length) {
- var digitsFactor = Math.pow(10, parseInt(opts.digits));
- initialValue = initialValue.replace(Inputmask.escapeRegex(opts.radixPoint), "."),
- initialValue = Math.round(parseFloat(initialValue) * digitsFactor) / digitsFactor,
- initialValue = initialValue.toString().replace(".", opts.radixPoint);
- }
- }
- return opts.numericInput === !0 && (initialValue = initialValue.split("").reverse().join("")),
- initialValue;
- },
- canClearPosition: function(maskset, position, lvp, strict, opts) {
- var positionInput = maskset.validPositions[position].input, canClear = positionInput !== opts.radixPoint || null !== maskset.validPositions[position].match.fn && opts.decimalProtect === !1 || isFinite(positionInput) || position === lvp || positionInput === opts.groupSeparator || positionInput === opts.negationSymbol.front || positionInput === opts.negationSymbol.back;
- return canClear;
- },
- onKeyDown: function(e, buffer, caretPos, opts) {
- var $input = $(this);
- if (e.ctrlKey) switch (e.keyCode) {
- case Inputmask.keyCode.UP:
- $input.val(parseFloat(this.inputmask.unmaskedvalue()) + parseInt(opts.step)), $input.trigger("setvalue");
- break;
-
- case Inputmask.keyCode.DOWN:
- $input.val(parseFloat(this.inputmask.unmaskedvalue()) - parseInt(opts.step)), $input.trigger("setvalue");
- }
- }
- },
- currency: {
- prefix: "$ ",
- groupSeparator: ",",
- alias: "numeric",
- placeholder: "0",
- autoGroup: !0,
- digits: 2,
- digitsOptional: !1,
- clearMaskOnLostFocus: !1
- },
- decimal: {
- alias: "numeric"
- },
- integer: {
- alias: "numeric",
- digits: 0,
- radixPoint: ""
- },
- percentage: {
- alias: "numeric",
- digits: 2,
- radixPoint: ".",
- placeholder: "0",
- autoGroup: !1,
- min: 0,
- max: 100,
- suffix: " %",
- allowPlus: !1,
- allowMinus: !1
- }
- }), Inputmask;
-}(jQuery, Inputmask), function($, Inputmask) {
- function maskSort(a, b) {
- var maska = (a.mask || a).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskb = (b.mask || b).replace(/#/g, "9").replace(/\)/, "9").replace(/[+()#-]/g, ""), maskas = (a.mask || a).split("#")[0], maskbs = (b.mask || b).split("#")[0];
- return 0 === maskbs.indexOf(maskas) ? -1 : 0 === maskas.indexOf(maskbs) ? 1 : maska.localeCompare(maskb);
- }
- var analyseMaskBase = Inputmask.prototype.analyseMask;
- return Inputmask.prototype.analyseMask = function(mask, opts) {
- function reduceVariations(masks, previousVariation, previousmaskGroup) {
- previousVariation = previousVariation || "", previousmaskGroup = previousmaskGroup || maskGroups,
- "" !== previousVariation && (previousmaskGroup[previousVariation] = {});
- for (var variation = "", maskGroup = previousmaskGroup[previousVariation] || previousmaskGroup, i = masks.length - 1; i >= 0; i--) mask = masks[i].mask || masks[i],
- variation = mask.substr(0, 1), maskGroup[variation] = maskGroup[variation] || [],
- maskGroup[variation].unshift(mask.substr(1)), masks.splice(i, 1);
- for (var ndx in maskGroup) maskGroup[ndx].length > 500 && reduceVariations(maskGroup[ndx].slice(), ndx, maskGroup);
- }
- function rebuild(maskGroup) {
- var mask = "", submasks = [];
- for (var ndx in maskGroup) $.isArray(maskGroup[ndx]) ? 1 === maskGroup[ndx].length ? submasks.push(ndx + maskGroup[ndx]) : submasks.push(ndx + opts.groupmarker.start + maskGroup[ndx].join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end) : submasks.push(ndx + rebuild(maskGroup[ndx]));
- return mask += 1 === submasks.length ? submasks[0] : opts.groupmarker.start + submasks.join(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start) + opts.groupmarker.end;
- }
- var maskGroups = {};
- opts.phoneCodes && (opts.phoneCodes && opts.phoneCodes.length > 1e3 && (mask = mask.substr(1, mask.length - 2),
- reduceVariations(mask.split(opts.groupmarker.end + opts.alternatormarker + opts.groupmarker.start)),
- mask = rebuild(maskGroups)), mask = mask.replace(/9/g, "\\9"));
- var mt = analyseMaskBase.call(this, mask, opts);
- return mt;
- }, Inputmask.extendAliases({
- abstractphone: {
- groupmarker: {
- start: "<",
- end: ">"
- },
- countrycode: "",
- phoneCodes: [],
- mask: function(opts) {
- return opts.definitions = {
- "#": Inputmask.prototype.definitions[9]
- }, opts.phoneCodes.sort(maskSort);
- },
- keepStatic: !0,
- onBeforeMask: function(value, opts) {
- var processedValue = value.replace(/^0{1,2}/, "").replace(/[\s]/g, "");
- return (processedValue.indexOf(opts.countrycode) > 1 || processedValue.indexOf(opts.countrycode) === -1) && (processedValue = "+" + opts.countrycode + processedValue),
- processedValue;
- },
- onUnMask: function(maskedValue, unmaskedValue, opts) {
- return unmaskedValue;
- },
- inputmode: "tel"
- }
- }), Inputmask;
-}(jQuery, Inputmask), function($, Inputmask) {
- return Inputmask.extendAliases({
- Regex: {
- mask: "r",
- greedy: !1,
- repeat: "*",
- regex: null,
- regexTokens: null,
- tokenizer: /\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${[()|\\]+|./g,
- quantifierFilter: /[0-9]+[^,]/,
- isComplete: function(buffer, opts) {
- return new RegExp(opts.regex, opts.casing ? "i" : "").test(buffer.join(""));
- },
- definitions: {
- r: {
- validator: function(chrs, maskset, pos, strict, opts) {
- function RegexToken(isGroup, isQuantifier) {
- this.matches = [], this.isGroup = isGroup || !1, this.isQuantifier = isQuantifier || !1,
- this.quantifier = {
- min: 1,
- max: 1
- }, this.repeaterPart = void 0;
- }
- function analyseRegex() {
- var match, m, currentToken = new RegexToken(), opengroups = [];
- for (opts.regexTokens = []; match = opts.tokenizer.exec(opts.regex); ) switch (m = match[0],
- m.charAt(0)) {
- case "(":
- opengroups.push(new RegexToken((!0)));
- break;
-
- case ")":
- groupToken = opengroups.pop(), opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(groupToken) : currentToken.matches.push(groupToken);
- break;
-
- case "{":
- case "+":
- case "*":
- var quantifierToken = new RegexToken((!1), (!0));
- m = m.replace(/[{}]/g, "");
- var mq = m.split(","), mq0 = isNaN(mq[0]) ? mq[0] : parseInt(mq[0]), mq1 = 1 === mq.length ? mq0 : isNaN(mq[1]) ? mq[1] : parseInt(mq[1]);
- if (quantifierToken.quantifier = {
- min: mq0,
- max: mq1
- }, opengroups.length > 0) {
- var matches = opengroups[opengroups.length - 1].matches;
- match = matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)), groupToken.matches.push(match),
- match = groupToken), matches.push(match), matches.push(quantifierToken);
- } else match = currentToken.matches.pop(), match.isGroup || (groupToken = new RegexToken((!0)),
- groupToken.matches.push(match), match = groupToken), currentToken.matches.push(match),
- currentToken.matches.push(quantifierToken);
- break;
-
- default:
- opengroups.length > 0 ? opengroups[opengroups.length - 1].matches.push(m) : currentToken.matches.push(m);
- }
- currentToken.matches.length > 0 && opts.regexTokens.push(currentToken);
- }
- function validateRegexToken(token, fromGroup) {
- var isvalid = !1;
- fromGroup && (regexPart += "(", openGroupCount++);
- for (var mndx = 0; mndx < token.matches.length; mndx++) {
- var matchToken = token.matches[mndx];
- if (matchToken.isGroup === !0) isvalid = validateRegexToken(matchToken, !0); else if (matchToken.isQuantifier === !0) {
- var crrntndx = $.inArray(matchToken, token.matches), matchGroup = token.matches[crrntndx - 1], regexPartBak = regexPart;
- if (isNaN(matchToken.quantifier.max)) {
- for (;matchToken.repeaterPart && matchToken.repeaterPart !== regexPart && matchToken.repeaterPart.length > regexPart.length && !(isvalid = validateRegexToken(matchGroup, !0)); ) ;
- isvalid = isvalid || validateRegexToken(matchGroup, !0), isvalid && (matchToken.repeaterPart = regexPart),
- regexPart = regexPartBak + matchToken.quantifier.max;
- } else {
- for (var i = 0, qm = matchToken.quantifier.max - 1; i < qm && !(isvalid = validateRegexToken(matchGroup, !0)); i++) ;
- regexPart = regexPartBak + "{" + matchToken.quantifier.min + "," + matchToken.quantifier.max + "}";
- }
- } else if (void 0 !== matchToken.matches) for (var k = 0; k < matchToken.length && !(isvalid = validateRegexToken(matchToken[k], fromGroup)); k++) ; else {
- var testExp;
- if ("[" == matchToken.charAt(0)) {
- testExp = regexPart, testExp += matchToken;
- for (var j = 0; j < openGroupCount; j++) testExp += ")";
- var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "");
- isvalid = exp.test(bufferStr);
- } else for (var l = 0, tl = matchToken.length; l < tl; l++) if ("\\" !== matchToken.charAt(l)) {
- testExp = regexPart, testExp += matchToken.substr(0, l + 1), testExp = testExp.replace(/\|$/, "");
- for (var j = 0; j < openGroupCount; j++) testExp += ")";
- var exp = new RegExp("^(" + testExp + ")$", opts.casing ? "i" : "");
- if (isvalid = exp.test(bufferStr)) break;
- }
- regexPart += matchToken;
- }
- if (isvalid) break;
- }
- return fromGroup && (regexPart += ")", openGroupCount--), isvalid;
- }
- var bufferStr, groupToken, cbuffer = maskset.buffer.slice(), regexPart = "", isValid = !1, openGroupCount = 0;
- null === opts.regexTokens && analyseRegex(), cbuffer.splice(pos, 0, chrs), bufferStr = cbuffer.join("");
- for (var i = 0; i < opts.regexTokens.length; i++) {
- var regexToken = opts.regexTokens[i];
- if (isValid = validateRegexToken(regexToken, regexToken.isGroup)) break;
- }
- return isValid;
- },
- cardinality: 1
- }
- }
- }
- }), Inputmask;
-}(jQuery, Inputmask);
\ No newline at end of file
diff --git a/app_widget_extra/static/src/js/inputmask_widget.js b/app_widget_extra/static/src/js/inputmask_widget.js
deleted file mode 100644
index 36d4ee49..00000000
--- a/app_widget_extra/static/src/js/inputmask_widget.js
+++ /dev/null
@@ -1,119 +0,0 @@
-odoo.define('web.inputmask_widget', function (require) {
- "use strict";
- var core = require('web.core');
- var formats = require('web.formats');
- var form_widgets = require('web.form_widgets');
- var kanban_widgets = require('web_kanban.widgets');
- var utils = require('web.utils');
- var list_widget_registry = core.list_widget_registry;
- var QWeb = core.qweb;
-
- function mask_attrs(attrs) {
- var keyMask = 'data-inputmask';
- var attributes = {};
- if (keyMask in attrs)
- attributes[keyMask] = attrs[keyMask];
- else
- attributes = Object.keys(attrs).reduce(function (filtered, key) {
- if (key.indexOf(keyMask) !== -1)
- filtered[key] = attrs[key];
- return filtered;
- }, {});
- if (!attributes)
- console.warn("The widget Mask expects the 'data-inputmask[-attribute]' attributes!")
- return attributes;
- }
-
- var FieldMask = form_widgets.FieldChar.extend({
- template: "FieldMask",
- attributes: {},
- init: function (field_manager, node) {
- this._super(field_manager, node)
- this.attributes = mask_attrs(node.attrs);
- },
- render_value: function (mask) {
- this._super();
- if (this.attributes) {
- if (this.$input !== undefined)
- this.$input.inputmask(mask);
- else if ('contenteditable' in this.node.attrs)
- this.$el.inputmask(mask);
- }
- },
- //在前端验证输入值是否符合inputmask
- is_valid: function () {
- var musk = this.attributes['data-inputmask-regex'] ? this.attributes['data-inputmask-regex'] : this.attributes['data-inputmask'] ;
- var reg = new RegExp (musk,"g");
- //当状态变化成只读时,则默认全部通过
- try {
- var value = this.$input.val();
- } catch(err) {
- return true;
- }
-
- if (!this.get('required') && this.is_false()) {
- return true;
- } else if (reg.test(value)) {
- return true;
- } else {
- return false;
- }
- },
- });
-
- var FieldMaskRegex = FieldMask.extend({
- render_value: function () {
- this._super("Regex");
- }
- });
-
- var ColumnMask = list_widget_registry.get('field.char').extend({
- attributes: {},
- $mask: undefined,
- init: function (id, tag, attrs) {
- this._super(id, tag, attrs);
- this.attributes = mask_attrs(attrs);
- if (this.attributes)
- this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, {
- placeholder: '',
- greedy: false
- });
- },
- format: function (row_data, options) {
- var value = this._super(row_data, options);
- if (this.$mask) {
- this.$mask.val(value);
- value = this.$mask.val();
- }
- return value;
- }
- });
-
- var MaskWidget = kanban_widgets.AbstractField.extend({
- tagName: 'span',
- attributes: {},
- init: function (parent, field, $node) {
- this._super(parent, field, $node);
- this.attributes = mask_attrs(field.__attrs);
- if (this.attributes)
- this.$mask = $(jQuery.parseHTML(QWeb.render('Widget.mask', {widget: this}))).inputmask(undefined, {
- placeholder: '',
- greedy: false
- });
- },
- renderElement: function () {
- var value = this.field.raw_value;
- if (this.$mask)
- this.$mask.val(value);
- value = this.$mask.val();
- this.$el.text(value);
- }
- });
-
- core.form_widget_registry.add('mask', FieldMask);
- core.form_widget_registry.add('mask_regex', FieldMaskRegex);
- list_widget_registry.add('field.mask', ColumnMask);
- kanban_widgets.registry.add("mask", MaskWidget);
-
- return {FieldMask: FieldMask, FieldMaskRegex: FieldMaskRegex, MaskWidget: MaskWidget};
-});
diff --git a/app_widget_extra/static/src/xml/inputmask_widget.xml b/app_widget_extra/static/src/xml/inputmask_widget.xml
deleted file mode 100644
index aeb0d6c8..00000000
--- a/app_widget_extra/static/src/xml/inputmask_widget.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app_widget_extra/views/inputmask_templates.xml b/app_widget_extra/views/inputmask_templates.xml
deleted file mode 100644
index b2a0aca9..00000000
--- a/app_widget_extra/views/inputmask_templates.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-