mirror of
https://github.com/OCA/knowledge.git
synced 2025-07-13 15:34:49 -06:00
pre-commit update
This commit is contained in:
parent
c3f016c19f
commit
f3cc82a65a
@ -7,11 +7,11 @@ indent_style = space
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
|
||||
[.eslintrc,*.{json,yml,yaml,rst,md}]
|
||||
[*.{json,yml,yaml,rst,md}]
|
||||
indent_size = 2
|
||||
|
||||
# Do not configure editor for libs and autogenerated content
|
||||
[*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst]
|
||||
[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
|
||||
charset = unset
|
||||
end_of_line = unset
|
||||
indent_size = unset
|
||||
|
291
.eslintrc
291
.eslintrc
@ -1,291 +0,0 @@
|
||||
{
|
||||
"globals": {
|
||||
"$": false,
|
||||
"_": false,
|
||||
"fuzzy": false,
|
||||
"jQuery": false,
|
||||
"moment": false,
|
||||
"odoo": false,
|
||||
"openerp": false,
|
||||
"self": false
|
||||
},
|
||||
"env": {
|
||||
"browser": true
|
||||
},
|
||||
"rules": {
|
||||
"no-alert": "warn",
|
||||
"no-array-constructor": "warn",
|
||||
"no-bitwise": "off",
|
||||
"no-caller": "warn",
|
||||
"no-case-declarations": "warn",
|
||||
"no-catch-shadow": "warn",
|
||||
"no-class-assign": "warn",
|
||||
"no-cond-assign": "warn",
|
||||
"no-confusing-arrow": "warn",
|
||||
"no-console": "off",
|
||||
"no-const-assign": "warn",
|
||||
"no-constant-condition": "warn",
|
||||
"no-continue": "off",
|
||||
"no-control-regex": "warn",
|
||||
"no-debugger": "warn",
|
||||
"no-delete-var": "warn",
|
||||
"no-div-regex": "warn",
|
||||
"no-dupe-args": "warn",
|
||||
"no-dupe-class-members": "warn",
|
||||
"no-dupe-keys": "warn",
|
||||
"no-duplicate-case": "warn",
|
||||
"no-duplicate-imports": "warn",
|
||||
"no-else-return": "warn",
|
||||
"no-empty": "warn",
|
||||
"no-empty-character-class": "warn",
|
||||
"no-empty-function": "warn",
|
||||
"no-empty-pattern": "warn",
|
||||
"no-eq-null": "warn",
|
||||
"no-eval": "warn",
|
||||
"no-ex-assign": "warn",
|
||||
"no-extend-native": "warn",
|
||||
"no-extra-bind": "warn",
|
||||
"no-extra-boolean-cast": "warn",
|
||||
"no-extra-label": "warn",
|
||||
"no-extra-parens": "warn",
|
||||
"no-extra-semi": "warn",
|
||||
"no-fallthrough": "warn",
|
||||
"no-floating-decimal": "warn",
|
||||
"no-func-assign": "warn",
|
||||
"no-implicit-coercion": ["warn", {
|
||||
"allow": ["~"]
|
||||
}],
|
||||
"no-implicit-globals": "warn",
|
||||
"no-implied-eval": "warn",
|
||||
"no-inline-comments": "warn",
|
||||
"no-inner-declarations": "warn",
|
||||
"no-invalid-regexp": "warn",
|
||||
"no-invalid-this": "off",
|
||||
"no-irregular-whitespace": "warn",
|
||||
"no-iterator": "warn",
|
||||
"no-label-var": "warn",
|
||||
"no-labels": "warn",
|
||||
"no-lone-blocks": "warn",
|
||||
"no-lonely-if": "warn",
|
||||
"no-loop-func": "off",
|
||||
"no-magic-numbers": "off",
|
||||
"no-mixed-operators": "warn",
|
||||
"no-mixed-requires": "warn",
|
||||
"no-mixed-spaces-and-tabs": "warn",
|
||||
"no-multi-spaces": "warn",
|
||||
"no-multi-str": "warn",
|
||||
"no-multiple-empty-lines": "warn",
|
||||
"no-native-reassign": "warn",
|
||||
"no-negated-condition": "warn",
|
||||
"no-negated-in-lhs": "warn",
|
||||
"no-nested-ternary": "off",
|
||||
"no-new": "warn",
|
||||
"no-new-func": "warn",
|
||||
"no-new-object": "warn",
|
||||
"no-new-require": "warn",
|
||||
"no-new-symbol": "warn",
|
||||
"no-new-wrappers": "warn",
|
||||
"no-obj-calls": "warn",
|
||||
"no-octal": "warn",
|
||||
"no-octal-escape": "warn",
|
||||
"no-param-reassign": "warn",
|
||||
"no-path-concat": "warn",
|
||||
"no-plusplus": "off",
|
||||
"no-process-env": "warn",
|
||||
"no-process-exit": "warn",
|
||||
"no-proto": "warn",
|
||||
"no-prototype-builtins": "warn",
|
||||
"no-redeclare": "warn",
|
||||
"no-regex-spaces": "warn",
|
||||
"no-restricted-globals": "warn",
|
||||
"no-restricted-imports": "warn",
|
||||
"no-restricted-modules": "warn",
|
||||
"no-restricted-syntax": "warn",
|
||||
"no-return-assign": "warn",
|
||||
"no-script-url": "warn",
|
||||
"no-self-assign": "warn",
|
||||
"no-self-compare": "warn",
|
||||
"no-sequences": "warn",
|
||||
"no-shadow": "warn",
|
||||
"no-shadow-restricted-names": "warn",
|
||||
"no-whitespace-before-property": "warn",
|
||||
"no-spaced-func": "warn",
|
||||
"no-sparse-arrays": "warn",
|
||||
"no-sync": "warn",
|
||||
"no-tabs": "warn",
|
||||
"no-ternary": "off",
|
||||
"no-trailing-spaces": "warn",
|
||||
"no-this-before-super": "warn",
|
||||
"no-throw-literal": "warn",
|
||||
"no-undef": "warn",
|
||||
"no-undef-init": "warn",
|
||||
"no-undefined": "off",
|
||||
"no-unexpected-multiline": "warn",
|
||||
"no-underscore-dangle": "off",
|
||||
"no-unmodified-loop-condition": "warn",
|
||||
"no-unneeded-ternary": "warn",
|
||||
"no-unreachable": "warn",
|
||||
"no-unsafe-finally": "warn",
|
||||
"no-unused-expressions": "warn",
|
||||
"no-unused-labels": "warn",
|
||||
"no-unused-vars": "warn",
|
||||
"no-use-before-define": "warn",
|
||||
"no-useless-call": "warn",
|
||||
"no-useless-computed-key": "warn",
|
||||
"no-useless-concat": "warn",
|
||||
"no-useless-constructor": "warn",
|
||||
"no-useless-escape": "warn",
|
||||
"no-useless-rename": "warn",
|
||||
"no-void": "warn",
|
||||
"no-var": "off",
|
||||
"no-warning-comments": "off",
|
||||
"no-with": "warn",
|
||||
"array-bracket-spacing": "off",
|
||||
"array-callback-return": "warn",
|
||||
"arrow-body-style": "warn",
|
||||
"arrow-parens": "warn",
|
||||
"arrow-spacing": "off",
|
||||
"accessor-pairs": "warn",
|
||||
"block-scoped-var": "off",
|
||||
"block-spacing": ["warn", "always"],
|
||||
"brace-style": "warn",
|
||||
"callback-return": "warn",
|
||||
"camelcase": "off",
|
||||
"capitalized-comments": ["warn", "always", {
|
||||
"ignoreConsecutiveComments": true,
|
||||
"ignoreInlineComments": true
|
||||
}],
|
||||
"comma-dangle": ["warn", "always-multiline"],
|
||||
"comma-spacing": ["warn", {
|
||||
"before": false,
|
||||
"after": true
|
||||
}],
|
||||
"comma-style": "warn",
|
||||
"complexity": [
|
||||
"warn",
|
||||
15
|
||||
],
|
||||
"computed-property-spacing": "off",
|
||||
"consistent-return": "off",
|
||||
"consistent-this": "off",
|
||||
"constructor-super": "warn",
|
||||
"curly": "warn",
|
||||
"default-case": "off",
|
||||
"dot-location": ["warn", "property"],
|
||||
"dot-notation": "warn",
|
||||
"eol-last": "warn",
|
||||
"eqeqeq": "warn",
|
||||
"func-names": "off",
|
||||
"func-style": "off",
|
||||
"generator-star-spacing": "off",
|
||||
"global-require": "warn",
|
||||
"guard-for-in": "off",
|
||||
"handle-callback-err": "warn",
|
||||
"id-blacklist": "warn",
|
||||
"id-length": "off",
|
||||
"id-match": "warn",
|
||||
"indent": "warn",
|
||||
"init-declarations": "warn",
|
||||
"jsx-quotes": "warn",
|
||||
"key-spacing": "off",
|
||||
"keyword-spacing": "warn",
|
||||
"linebreak-style": [
|
||||
"warn",
|
||||
"unix"
|
||||
],
|
||||
"lines-around-comment": "warn",
|
||||
"max-depth": "warn",
|
||||
"max-len": ["warn", {
|
||||
"code": 88,
|
||||
"ignorePattern": "odoo\\.define\\(",
|
||||
"tabWidth": 4
|
||||
}],
|
||||
"max-lines": "off",
|
||||
"max-nested-callbacks": "warn",
|
||||
"max-params": "off",
|
||||
"max-statements": "off",
|
||||
"max-statements-per-line": "warn",
|
||||
"multiline-ternary": "off",
|
||||
"new-cap": "off",
|
||||
"new-parens": "warn",
|
||||
"newline-after-var": "off",
|
||||
"newline-before-return": "off",
|
||||
"newline-per-chained-call": "off",
|
||||
"object-curly-newline": ["warn", { "consistent": true }],
|
||||
"object-curly-spacing": ["warn", "never"],
|
||||
"object-property-newline": ["warn", {
|
||||
"allowAllPropertiesOnSameLine": true
|
||||
}],
|
||||
"object-shorthand": "off",
|
||||
"one-var": "off",
|
||||
"one-var-declaration-per-line": "off",
|
||||
"operator-assignment": "warn",
|
||||
"operator-linebreak": "warn",
|
||||
"padded-blocks": "off",
|
||||
"prefer-arrow-callback": "off",
|
||||
"prefer-const": "warn",
|
||||
"prefer-reflect": "off",
|
||||
"prefer-rest-params": "off",
|
||||
"prefer-spread": "off",
|
||||
"prefer-template": "off",
|
||||
"quote-props": "off",
|
||||
"quotes": "off",
|
||||
"radix": "warn",
|
||||
"require-yield": "warn",
|
||||
"rest-spread-spacing": "off",
|
||||
"semi": [
|
||||
"warn",
|
||||
"always"
|
||||
],
|
||||
"semi-spacing": "warn",
|
||||
"sort-imports": "warn",
|
||||
"sort-vars": "off",
|
||||
"space-before-blocks": "warn",
|
||||
"space-before-function-paren": "warn",
|
||||
"space-in-parens": "off",
|
||||
"space-infix-ops": "off",
|
||||
"space-unary-ops": "off",
|
||||
"spaced-comment": ["warn", "always"],
|
||||
"strict": ["warn", "function"],
|
||||
"template-curly-spacing": "off",
|
||||
"unicode-bom": "warn",
|
||||
"use-isnan": "warn",
|
||||
"valid-jsdoc": ["warn", {
|
||||
"prefer": {
|
||||
"arg": "param",
|
||||
"argument": "param",
|
||||
"augments": "extends",
|
||||
"constructor": "class",
|
||||
"exception": "throws",
|
||||
"func": "function",
|
||||
"method": "function",
|
||||
"prop": "property",
|
||||
"return": "returns",
|
||||
"virtual": "abstract",
|
||||
"yield": "yields"
|
||||
},
|
||||
"preferType": {
|
||||
"array": "Array",
|
||||
"bool": "Boolean",
|
||||
"boolean": "Boolean",
|
||||
"number": "Number",
|
||||
"object": "Object",
|
||||
"str": "String",
|
||||
"string": "String"
|
||||
},
|
||||
"requireParamDescription": false,
|
||||
"requireReturn": false,
|
||||
"requireReturnDescription": false,
|
||||
"requireReturnType": false
|
||||
}],
|
||||
"valid-typeof": "warn",
|
||||
"vars-on-top": "off",
|
||||
"wrap-iife": "warn",
|
||||
"wrap-regex": "warn",
|
||||
"yield-star-spacing": "off",
|
||||
"yoda": "warn"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2017
|
||||
}
|
||||
}
|
180
.eslintrc.yml
Normal file
180
.eslintrc.yml
Normal file
@ -0,0 +1,180 @@
|
||||
env:
|
||||
browser: true
|
||||
|
||||
# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
|
||||
parserOptions:
|
||||
ecmaVersion: 2017
|
||||
|
||||
# Globals available in Odoo that shouldn't produce errorings
|
||||
globals:
|
||||
_: readonly
|
||||
$: readonly
|
||||
fuzzy: readonly
|
||||
jQuery: readonly
|
||||
moment: readonly
|
||||
odoo: readonly
|
||||
openerp: readonly
|
||||
Promise: readonly
|
||||
|
||||
# Styling is handled by Prettier, so we only need to enable AST rules;
|
||||
# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
|
||||
rules:
|
||||
accessor-pairs: warn
|
||||
array-callback-return: warn
|
||||
callback-return: warn
|
||||
capitalized-comments:
|
||||
- warn
|
||||
- always
|
||||
- ignoreConsecutiveComments: true
|
||||
ignoreInlineComments: true
|
||||
complexity:
|
||||
- warn
|
||||
- 15
|
||||
constructor-super: warn
|
||||
dot-notation: warn
|
||||
eqeqeq: warn
|
||||
global-require: warn
|
||||
handle-callback-err: warn
|
||||
id-blacklist: warn
|
||||
id-match: warn
|
||||
init-declarations: error
|
||||
max-depth: warn
|
||||
max-nested-callbacks: warn
|
||||
max-statements-per-line: warn
|
||||
no-alert: warn
|
||||
no-array-constructor: warn
|
||||
no-caller: warn
|
||||
no-case-declarations: warn
|
||||
no-class-assign: warn
|
||||
no-cond-assign: error
|
||||
no-const-assign: error
|
||||
no-constant-condition: warn
|
||||
no-control-regex: warn
|
||||
no-debugger: error
|
||||
no-delete-var: warn
|
||||
no-div-regex: warn
|
||||
no-dupe-args: error
|
||||
no-dupe-class-members: error
|
||||
no-dupe-keys: error
|
||||
no-duplicate-case: error
|
||||
no-duplicate-imports: error
|
||||
no-else-return: warn
|
||||
no-empty-character-class: warn
|
||||
no-empty-function: error
|
||||
no-empty-pattern: error
|
||||
no-empty: warn
|
||||
no-eq-null: error
|
||||
no-eval: error
|
||||
no-ex-assign: error
|
||||
no-extend-native: warn
|
||||
no-extra-bind: warn
|
||||
no-extra-boolean-cast: warn
|
||||
no-extra-label: warn
|
||||
no-fallthrough: warn
|
||||
no-func-assign: error
|
||||
no-global-assign: error
|
||||
no-implicit-coercion:
|
||||
- warn
|
||||
- allow: ["~"]
|
||||
no-implicit-globals: warn
|
||||
no-implied-eval: warn
|
||||
no-inline-comments: warn
|
||||
no-inner-declarations: warn
|
||||
no-invalid-regexp: warn
|
||||
no-irregular-whitespace: warn
|
||||
no-iterator: warn
|
||||
no-label-var: warn
|
||||
no-labels: warn
|
||||
no-lone-blocks: warn
|
||||
no-lonely-if: error
|
||||
no-mixed-requires: error
|
||||
no-multi-str: warn
|
||||
no-native-reassign: error
|
||||
no-negated-condition: warn
|
||||
no-negated-in-lhs: error
|
||||
no-new-func: warn
|
||||
no-new-object: warn
|
||||
no-new-require: warn
|
||||
no-new-symbol: warn
|
||||
no-new-wrappers: warn
|
||||
no-new: warn
|
||||
no-obj-calls: warn
|
||||
no-octal-escape: warn
|
||||
no-octal: warn
|
||||
no-param-reassign: warn
|
||||
no-path-concat: warn
|
||||
no-process-env: warn
|
||||
no-process-exit: warn
|
||||
no-proto: warn
|
||||
no-prototype-builtins: warn
|
||||
no-redeclare: warn
|
||||
no-regex-spaces: warn
|
||||
no-restricted-globals: warn
|
||||
no-restricted-imports: warn
|
||||
no-restricted-modules: warn
|
||||
no-restricted-syntax: warn
|
||||
no-return-assign: error
|
||||
no-script-url: warn
|
||||
no-self-assign: warn
|
||||
no-self-compare: warn
|
||||
no-sequences: warn
|
||||
no-shadow-restricted-names: warn
|
||||
no-shadow: warn
|
||||
no-sparse-arrays: warn
|
||||
no-sync: warn
|
||||
no-this-before-super: warn
|
||||
no-throw-literal: warn
|
||||
no-undef-init: warn
|
||||
no-undef: error
|
||||
no-unmodified-loop-condition: warn
|
||||
no-unneeded-ternary: error
|
||||
no-unreachable: error
|
||||
no-unsafe-finally: error
|
||||
no-unused-expressions: error
|
||||
no-unused-labels: error
|
||||
no-unused-vars: error
|
||||
no-use-before-define: error
|
||||
no-useless-call: warn
|
||||
no-useless-computed-key: warn
|
||||
no-useless-concat: warn
|
||||
no-useless-constructor: warn
|
||||
no-useless-escape: warn
|
||||
no-useless-rename: warn
|
||||
no-void: warn
|
||||
no-with: warn
|
||||
operator-assignment: [error, always]
|
||||
prefer-const: warn
|
||||
radix: warn
|
||||
require-yield: warn
|
||||
sort-imports: warn
|
||||
spaced-comment: [error, always]
|
||||
strict: [error, function]
|
||||
use-isnan: error
|
||||
valid-jsdoc:
|
||||
- warn
|
||||
- prefer:
|
||||
arg: param
|
||||
argument: param
|
||||
augments: extends
|
||||
constructor: class
|
||||
exception: throws
|
||||
func: function
|
||||
method: function
|
||||
prop: property
|
||||
return: returns
|
||||
virtual: abstract
|
||||
yield: yields
|
||||
preferType:
|
||||
array: Array
|
||||
bool: Boolean
|
||||
boolean: Boolean
|
||||
number: Number
|
||||
object: Object
|
||||
str: String
|
||||
string: String
|
||||
requireParamDescription: false
|
||||
requireReturn: false
|
||||
requireReturnDescription: false
|
||||
requireReturnType: false
|
||||
valid-typeof: warn
|
||||
yoda: warn
|
@ -9,4 +9,4 @@ line_length=88
|
||||
known_odoo=odoo
|
||||
known_odoo_addons=odoo.addons
|
||||
sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
|
||||
known_third_party=setuptools
|
||||
default_section=THIRDPARTY
|
||||
|
@ -1,68 +1,99 @@
|
||||
exclude: "^setup/|/static/lib/|/static/src/lib/"
|
||||
exclude: |
|
||||
(?x)
|
||||
# Files and folders generated by bots, to avoid loops
|
||||
^setup/|/static/description/index\.html$|
|
||||
# Maybe reactivate this when all README files include prettier ignore tags?
|
||||
^README\.md$|
|
||||
# Library files can have extraneous formatting (even minimized)
|
||||
/static/(src/)?lib/|
|
||||
# Repos using Sphinx to generate docs don't need prettying
|
||||
^docs/_templates/.*\.html$|
|
||||
# You don't usually want a bot to modify your legal texts
|
||||
(LICENSE.*|COPYING.*)
|
||||
default_language_version:
|
||||
python: python3
|
||||
repos:
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 19.3b0
|
||||
hooks:
|
||||
- id: black
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v2.3.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
# exclude autogenerated files
|
||||
exclude: /README\.rst$|\.pot?$
|
||||
- id: end-of-file-fixer
|
||||
# exclude autogenerated files
|
||||
exclude: /README\.rst$|\.pot?$
|
||||
- id: debug-statements
|
||||
- id: flake8
|
||||
name: flake8 except __init__.py
|
||||
exclude: /__init__\.py$
|
||||
additional_dependencies: ["flake8-bugbear==19.8.0"]
|
||||
- id: flake8
|
||||
name: flake8 only __init__.py
|
||||
args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py
|
||||
files: /__init__\.py$
|
||||
additional_dependencies: ["flake8-bugbear==19.8.0"]
|
||||
- id: fix-encoding-pragma
|
||||
args: ["--remove"]
|
||||
- id: check-case-conflict
|
||||
- id: check-docstring-first
|
||||
- id: check-executables-have-shebangs
|
||||
- id: check-merge-conflict
|
||||
- id: check-symlinks
|
||||
- id: check-xml
|
||||
- id: mixed-line-ending
|
||||
args: ["--fix=lf"]
|
||||
- repo: https://github.com/pre-commit/mirrors-pylint
|
||||
rev: v2.3.1
|
||||
hooks:
|
||||
- id: pylint
|
||||
name: pylint with optional checks
|
||||
args: ["--rcfile=.pylintrc", "--exit-zero"]
|
||||
verbose: true
|
||||
additional_dependencies: ["pylint-odoo==3.0.3"]
|
||||
- id: pylint
|
||||
name: pylint with mandatory checks
|
||||
args: ["--rcfile=.pylintrc-mandatory"]
|
||||
additional_dependencies: ["pylint-odoo==3.0.3"]
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v1.24.0
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
- repo: https://github.com/asottile/seed-isort-config
|
||||
rev: v1.9.3
|
||||
hooks:
|
||||
- id: seed-isort-config
|
||||
- repo: https://github.com/pre-commit/mirrors-isort
|
||||
rev: v4.3.21
|
||||
hooks:
|
||||
- id: isort
|
||||
name: isort except __init__.py
|
||||
exclude: /__init__\.py$
|
||||
- repo: https://github.com/pre-commit/mirrors-eslint
|
||||
rev: v6.5.1
|
||||
hooks:
|
||||
- id: eslint
|
||||
verbose: true
|
||||
- repo: https://github.com/psf/black
|
||||
rev: 19.10b0
|
||||
hooks:
|
||||
- id: black
|
||||
- repo: https://github.com/prettier/prettier
|
||||
rev: "1.19.1"
|
||||
hooks:
|
||||
- id: prettier
|
||||
# TODO Avoid awebdeveloper/pre-commit-prettier if possible
|
||||
# HACK https://github.com/prettier/prettier/issues/7407
|
||||
- repo: https://github.com/awebdeveloper/pre-commit-prettier
|
||||
rev: v0.0.1
|
||||
hooks:
|
||||
- id: prettier
|
||||
name: prettier xml plugin
|
||||
additional_dependencies:
|
||||
- "prettier@1.19.1"
|
||||
- "@prettier/plugin-xml@0.7.2"
|
||||
files: \.xml$
|
||||
- repo: https://github.com/pre-commit/mirrors-eslint
|
||||
rev: v6.8.0
|
||||
hooks:
|
||||
- id: eslint
|
||||
verbose: true
|
||||
args:
|
||||
- --color
|
||||
- --fix
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v2.4.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
# exclude autogenerated files
|
||||
exclude: /README\.rst$|\.pot?$
|
||||
- id: end-of-file-fixer
|
||||
# exclude autogenerated files
|
||||
exclude: /README\.rst$|\.pot?$
|
||||
- id: debug-statements
|
||||
- id: flake8
|
||||
name: flake8 except __init__.py
|
||||
exclude: /__init__\.py$
|
||||
additional_dependencies: ["flake8-bugbear==19.8.0"]
|
||||
- id: flake8
|
||||
name: flake8 only __init__.py
|
||||
args: ["--extend-ignore=F401"] # ignore unused imports in __init__.py
|
||||
files: /__init__\.py$
|
||||
additional_dependencies: ["flake8-bugbear==19.8.0"]
|
||||
- id: fix-encoding-pragma
|
||||
args: ["--remove"]
|
||||
- id: check-case-conflict
|
||||
- id: check-docstring-first
|
||||
- id: check-executables-have-shebangs
|
||||
- id: check-merge-conflict
|
||||
# exclude files where underlines are not distinguishable from merge conflicts
|
||||
exclude: /README\.rst$|^docs/.*\.rst$
|
||||
- id: check-symlinks
|
||||
- id: check-xml
|
||||
- id: mixed-line-ending
|
||||
args: ["--fix=lf"]
|
||||
- repo: https://github.com/pre-commit/mirrors-pylint
|
||||
rev: v2.3.1
|
||||
hooks:
|
||||
- id: pylint
|
||||
name: pylint with optional checks
|
||||
args: ["--rcfile=.pylintrc", "--exit-zero"]
|
||||
verbose: true
|
||||
additional_dependencies: ["pylint-odoo==3.1.0"]
|
||||
- id: pylint
|
||||
name: pylint with mandatory checks
|
||||
args: ["--rcfile=.pylintrc-mandatory"]
|
||||
additional_dependencies: ["pylint-odoo==3.1.0"]
|
||||
- repo: https://github.com/asottile/pyupgrade
|
||||
rev: v1.26.2
|
||||
hooks:
|
||||
- id: pyupgrade
|
||||
- repo: https://github.com/pre-commit/mirrors-isort
|
||||
rev: v4.3.21
|
||||
hooks:
|
||||
- id: isort
|
||||
name: isort except __init__.py
|
||||
exclude: /__init__\.py$
|
||||
- repo: https://github.com/acsone/setuptools-odoo
|
||||
rev: 2.5.2
|
||||
hooks:
|
||||
- id: setuptools-odoo-make-default
|
||||
|
8
.prettierrc.yml
Normal file
8
.prettierrc.yml
Normal file
@ -0,0 +1,8 @@
|
||||
# Defaults for all prettier-supported languages.
|
||||
# Prettier will complete this with settings from .editorconfig file.
|
||||
bracketSpacing: false
|
||||
printWidth: 88
|
||||
proseWrap: always
|
||||
semi: true
|
||||
trailingComma: "es5"
|
||||
xmlWhitespaceSensitivity: "ignore"
|
11
.travis.yml
11
.travis.yml
@ -1,8 +1,8 @@
|
||||
language: python
|
||||
cache:
|
||||
directories:
|
||||
- $HOME/.cache/pip
|
||||
- $HOME/.cache/pre-commit
|
||||
- $HOME/.cache/pip
|
||||
- $HOME/.cache/pre-commit
|
||||
|
||||
python:
|
||||
- "3.6"
|
||||
@ -11,7 +11,7 @@ addons:
|
||||
postgresql: "9.6"
|
||||
apt:
|
||||
packages:
|
||||
- expect-dev # provides unbuffer utility
|
||||
- expect-dev # provides unbuffer utility
|
||||
|
||||
stages:
|
||||
- linting
|
||||
@ -34,10 +34,11 @@ jobs:
|
||||
|
||||
env:
|
||||
global:
|
||||
- VERSION="13.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0"
|
||||
- VERSION="13.0" TESTS="0" LINT_CHECK="0" MAKEPOT="0"
|
||||
|
||||
install:
|
||||
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git ${HOME}/maintainer-quality-tools
|
||||
- git clone --depth=1 https://github.com/OCA/maintainer-quality-tools.git
|
||||
${HOME}/maintainer-quality-tools
|
||||
- export PATH=${HOME}/maintainer-quality-tools/travis:${PATH}
|
||||
- travis_install_nightly
|
||||
|
||||
|
@ -1,15 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field eval="[(4, ref('knowledge.group_document_user'))]"
|
||||
name="groups_id"/>
|
||||
</record>
|
||||
|
||||
<record id="demo_category1" model="document.page">
|
||||
<field name="name">Odoo Features</field>
|
||||
<field name="type">category</field>
|
||||
<field name="template">
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field eval="[(4, ref('knowledge.group_document_user'))]" name="groups_id" />
|
||||
</record>
|
||||
<record id="demo_category1" model="document.page">
|
||||
<field name="name">Odoo Features</field>
|
||||
<field name="type">category</field>
|
||||
<field name="template">
|
||||
Summary of the feature
|
||||
|
||||
Long explanation
|
||||
@ -19,12 +16,11 @@ Conclusion
|
||||
Additional ressources
|
||||
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="demo_page1" model="document.page">
|
||||
<field name="name">Odoo 13.0 Functional Demo</field>
|
||||
<field name="parent_id" ref="demo_category1"/>
|
||||
<field name="content">
|
||||
</record>
|
||||
<record id="demo_page1" model="document.page">
|
||||
<field name="name">Odoo 13.0 Functional Demo</field>
|
||||
<field name="parent_id" ref="demo_category1" />
|
||||
<field name="content">
|
||||
<![CDATA[
|
||||
<br>
|
||||
<br>
|
||||
@ -48,12 +44,11 @@ company, with your clients and implement it now for your business.<br>
|
||||
<br>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="demo_page2" model="document.page">
|
||||
<field name="name">Personalise Dashboards</field>
|
||||
<field name="parent_id" ref="demo_category1"/>
|
||||
<field name="content">
|
||||
</record>
|
||||
<record id="demo_page2" model="document.page">
|
||||
<field name="name">Personalise Dashboards</field>
|
||||
<field name="parent_id" ref="demo_category1" />
|
||||
<field name="content">
|
||||
<![CDATA[
|
||||
<br>
|
||||
You like Odoo, but feel like you want to personalise it more? You can customize your
|
||||
@ -88,12 +83,11 @@ you change your mind there is a reset button to return to the default view.<br>
|
||||
<br>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="demo_page3" model="document.page">
|
||||
<field name="name">Touchscreen Point of Sale</field>
|
||||
<field name="parent_id" ref="demo_category1"/>
|
||||
<field name="content">
|
||||
</record>
|
||||
<record id="demo_page3" model="document.page">
|
||||
<field name="name">Touchscreen Point of Sale</field>
|
||||
<field name="parent_id" ref="demo_category1" />
|
||||
<field name="content">
|
||||
<![CDATA[
|
||||
<br>
|
||||
The Odoo touchscreen point of sale available with 13.0 allows you<br>
|
||||
@ -125,6 +119,5 @@ Think of it as an out-of-the-box solution to boost your business' productivity.<
|
||||
<br>
|
||||
]]>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</record>
|
||||
</odoo>
|
||||
|
@ -1,31 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="group_document_editor" model="res.groups">
|
||||
<field name="name">Editor</field>
|
||||
<field name="category_id" ref="knowledge.module_category_knowledge"/>
|
||||
<field name="implied_ids" eval="[(4, ref('knowledge.group_document_user'))]"/>
|
||||
<field name="category_id" ref="knowledge.module_category_knowledge" />
|
||||
<field name="implied_ids" eval="[(4, ref('knowledge.group_document_user'))]" />
|
||||
</record>
|
||||
|
||||
<record id="group_document_manager" model="res.groups">
|
||||
<field name="name">Manager</field>
|
||||
<field name="category_id" ref="knowledge.module_category_knowledge"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_document_editor'))]"/>
|
||||
<field name="users" eval="[(4, ref('base.user_admin'))]"/>
|
||||
<field name="category_id" ref="knowledge.module_category_knowledge" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_document_editor'))]" />
|
||||
<field name="users" eval="[(4, ref('base.user_admin'))]" />
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="document_page_rule">
|
||||
<field name="name">document_page multi-company</field>
|
||||
<field name="model_id" ref="model_document_page"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="model_id" ref="model_document_page" />
|
||||
<field name="global" eval="True" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
<record model="ir.rule" id="document_page_history_rule">
|
||||
<field name="name">document_page_history multi-company</field>
|
||||
<field name="model_id" ref="model_document_page_history"/>
|
||||
<field name="global" eval="True"/>
|
||||
<field name="domain_force">['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
<field name="model_id" ref="model_document_page_history" />
|
||||
<field name="global" eval="True" />
|
||||
<field
|
||||
name="domain_force"
|
||||
>['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
@ -3,26 +3,26 @@ table.diff {
|
||||
border: medium;
|
||||
|
||||
.diff_header {
|
||||
background-color: #e0e0e0
|
||||
background-color: #e0e0e0;
|
||||
}
|
||||
|
||||
td.diff_header {
|
||||
text-align: right
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.diff_next {
|
||||
background-color:#c0c0c0
|
||||
background-color: #c0c0c0;
|
||||
}
|
||||
|
||||
.diff_add {
|
||||
background-color:#aaffaa
|
||||
background-color: #aaffaa;
|
||||
}
|
||||
|
||||
.diff_chg {
|
||||
background-color:#ffff77
|
||||
background-color: #ffff77;
|
||||
}
|
||||
|
||||
.diff_sub {
|
||||
background-color:#ffaaaa
|
||||
background-color: #ffaaaa;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
|
||||
<!-- wiki tree view -->
|
||||
<record id="view_wiki_tree_children" model="ir.ui.view">
|
||||
<field name="name">document.page.tree</field>
|
||||
@ -9,29 +8,27 @@
|
||||
<field name="priority">100</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Document Page">
|
||||
<field name="name"/>
|
||||
<field name="content_uid"/>
|
||||
<field name="content_date"/>
|
||||
<field name="name" />
|
||||
<field name="content_uid" />
|
||||
<field name="content_date" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- wiki list view -->
|
||||
<record id="view_wiki_tree" model="ir.ui.view">
|
||||
<field name="name">document.page.list</field>
|
||||
<field name="model">document.page</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Document Page">
|
||||
<field name="name"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="create_uid" invisible="1"/>
|
||||
<field name="content_uid"/>
|
||||
<field name="content_date"/>
|
||||
<field name="name" />
|
||||
<field name="parent_id" />
|
||||
<field name="company_id" groups="base.group_multi_company" />
|
||||
<field name="create_uid" invisible="1" />
|
||||
<field name="content_uid" />
|
||||
<field name="content_date" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- wiki Form view -->
|
||||
<record id="view_wiki_form" model="ir.ui.view">
|
||||
<field name="name">document.page.form</field>
|
||||
@ -39,90 +36,132 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Document Page">
|
||||
<sheet>
|
||||
<widget name="web_ribbon" text="Archived" bg_color="bg-danger" attrs="{'invisible': [('active', '=', True)]}"/>
|
||||
<field name="active" invisible="1"/>
|
||||
<field name="type" invisible="1"/>
|
||||
<widget
|
||||
name="web_ribbon"
|
||||
text="Archived"
|
||||
bg_color="bg-danger"
|
||||
attrs="{'invisible': [('active', '=', True)]}"
|
||||
/>
|
||||
<field name="active" invisible="1" />
|
||||
<field name="type" invisible="1" />
|
||||
<h1>
|
||||
<field name="name" placeholder="Name"/>
|
||||
<field name="name" placeholder="Name" />
|
||||
</h1>
|
||||
<group>
|
||||
<div>
|
||||
<field name="content" widget="html" placeholder="e.g. Once upon a time..." required="1" options="{'safe': True}"/>
|
||||
<field
|
||||
name="content"
|
||||
widget="html"
|
||||
placeholder="e.g. Once upon a time..."
|
||||
required="1"
|
||||
options="{'safe': True}"
|
||||
/>
|
||||
</div>
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="info" string="Information">
|
||||
<group>
|
||||
<group>
|
||||
<field name="parent_id" string="Category" context="{'default_type':'category'}"/>
|
||||
<field name="company_id" groups="base.group_multi_company"/>
|
||||
<field name="content_uid"/>
|
||||
<field name="content_date"/>
|
||||
<field name="menu_id" readonly="1" attrs="{'invisible': [('menu_id','=',False)]}"/>
|
||||
<field
|
||||
name="parent_id"
|
||||
string="Category"
|
||||
context="{'default_type':'category'}"
|
||||
/>
|
||||
<field
|
||||
name="company_id"
|
||||
groups="base.group_multi_company"
|
||||
/>
|
||||
<field name="content_uid" />
|
||||
<field name="content_date" />
|
||||
<field
|
||||
name="menu_id"
|
||||
readonly="1"
|
||||
attrs="{'invisible': [('menu_id','=',False)]}"
|
||||
/>
|
||||
</group>
|
||||
<group string="Revision">
|
||||
<field name="draft_name" placeholder="Rev 01" />
|
||||
<field name="draft_summary" placeholder="eg: Changed ... for ..." />
|
||||
<field
|
||||
name="draft_summary"
|
||||
placeholder="eg: Changed ... for ..."
|
||||
/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page name="history" string="History">
|
||||
<field name="history_ids">
|
||||
<tree>
|
||||
<field name="id"/>
|
||||
<field name="create_date"/>
|
||||
<field name="name"/>
|
||||
<field name="summary"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="id" />
|
||||
<field name="create_date" />
|
||||
<field name="name" />
|
||||
<field name="summary" />
|
||||
<field name="create_uid" />
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="activity_ids" widget="mail_activity"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="activity_ids" widget="mail_activity" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_wiki_menu_form" model="ir.ui.view">
|
||||
<field name="name">document.page.menu.form</field>
|
||||
<field name="model">document.page</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Document Page" create="0">
|
||||
<field name="type" invisible="1"/>
|
||||
<field name="type" invisible="1" />
|
||||
<h1>
|
||||
<field name="name" placeholder="Name"/>
|
||||
<field name="name" placeholder="Name" />
|
||||
</h1>
|
||||
<field name="content" widget="html" class="oe_view_only" required="1" options='{"safe": True}'/>
|
||||
<field
|
||||
name="content"
|
||||
widget="html"
|
||||
class="oe_view_only"
|
||||
required="1"
|
||||
options='{"safe": True}'
|
||||
/>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- page Search view -->
|
||||
<record id="view_wiki_filter" model="ir.ui.view">
|
||||
<field name="name">document.page.search</field>
|
||||
<field name="model">document.page</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Document Page">
|
||||
<field name="name" string="Content"
|
||||
filter_domain="['|', ('name','ilike',self), ('content','ilike',self)]"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="content_uid"/>
|
||||
<field
|
||||
name="name"
|
||||
string="Content"
|
||||
filter_domain="['|', ('name','ilike',self), ('content','ilike',self)]"
|
||||
/>
|
||||
<field name="parent_id" />
|
||||
<field name="create_uid" />
|
||||
<field name="content_uid" />
|
||||
<group expand="0" string="Group By...">
|
||||
<filter name="group_by_category" string="Category" context="{'group_by':'parent_id'}"/>
|
||||
<filter name="group_by_author" string="Author" context="{'group_by':'create_uid'}"/>
|
||||
<filter name="group_by_last_contributor" string="Last Contributor" context="{'group_by':'content_uid'}"/>
|
||||
<filter
|
||||
name="group_by_category"
|
||||
string="Category"
|
||||
context="{'group_by':'parent_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="group_by_author"
|
||||
string="Author"
|
||||
context="{'group_by':'create_uid'}"
|
||||
/>
|
||||
<filter
|
||||
name="group_by_last_contributor"
|
||||
string="Last Contributor"
|
||||
context="{'group_by':'content_uid'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
|
||||
<!-- page action -->
|
||||
<record id="action_page" model="ir.actions.act_window">
|
||||
<field name="name">Pages</field>
|
||||
@ -130,40 +169,37 @@
|
||||
<field name="domain">[('type','=','content')]</field>
|
||||
<field name="context">{'default_type': 'content'}</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="search_view_id" ref="view_wiki_filter"/>
|
||||
<field name="view_id" ref="view_wiki_tree" />
|
||||
<field name="search_view_id" ref="view_wiki_filter" />
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click to create a new web page.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_page_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0"/>
|
||||
<field name="sequence" eval="0" />
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_wiki_tree"/>
|
||||
<field name="act_window_id" ref="action_page"/>
|
||||
<field name="view_id" ref="view_wiki_tree" />
|
||||
<field name="act_window_id" ref="action_page" />
|
||||
</record>
|
||||
|
||||
<record id="action_page_view_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="5"/>
|
||||
<field name="sequence" eval="5" />
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_wiki_form"/>
|
||||
<field name="act_window_id" ref="action_page"/>
|
||||
<field name="view_id" ref="view_wiki_form" />
|
||||
<field name="act_window_id" ref="action_page" />
|
||||
</record>
|
||||
|
||||
|
||||
<menuitem id="menu_wiki"
|
||||
name="Pages"
|
||||
parent="knowledge.menu_document_root"
|
||||
sequence="10"/>
|
||||
|
||||
|
||||
<menuitem id="menu_page"
|
||||
name="Pages"
|
||||
parent="menu_wiki"
|
||||
action="action_page"
|
||||
sequence="20"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_wiki"
|
||||
name="Pages"
|
||||
parent="knowledge.menu_document_root"
|
||||
sequence="10"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_page"
|
||||
name="Pages"
|
||||
parent="menu_wiki"
|
||||
action="action_page"
|
||||
sequence="20"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,10 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<template id="assets_backend" name="document_page assets" inherit_id="web.assets_backend">
|
||||
<template
|
||||
id="assets_backend"
|
||||
name="document_page assets"
|
||||
inherit_id="web.assets_backend"
|
||||
>
|
||||
<xpath expr="." position="inside">
|
||||
<link rel="stylesheet" type="text/scss" href="/document_page/static/src/scss/document_page.scss"/>
|
||||
<link
|
||||
rel="stylesheet"
|
||||
type="text/scss"
|
||||
href="/document_page/static/src/scss/document_page.scss"
|
||||
/>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
|
||||
<!-- Category Views -->
|
||||
<record id="view_category_form" model="ir.ui.view">
|
||||
<field name="name">document.page.category.form</field>
|
||||
@ -8,68 +7,94 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Category">
|
||||
<sheet>
|
||||
<field name="type" invisible="1"/>
|
||||
<h1><field name="name" placeholder="Name"/></h1>
|
||||
<field name="type" invisible="1" />
|
||||
<h1>
|
||||
<field name="name" placeholder="Name" />
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="parent_id" string="Category" context="{'default_type':'category'}"/>
|
||||
<field
|
||||
name="parent_id"
|
||||
string="Category"
|
||||
context="{'default_type':'category'}"
|
||||
/>
|
||||
</group>
|
||||
<group>
|
||||
<field name="write_uid" groups="base.group_no_one"/>
|
||||
<field name="write_date" groups="base.group_no_one"/>
|
||||
<field name="menu_id" groups="base.group_no_one"/>
|
||||
<field name="write_uid" groups="base.group_no_one" />
|
||||
<field name="write_date" groups="base.group_no_one" />
|
||||
<field name="menu_id" groups="base.group_no_one" />
|
||||
</group>
|
||||
</group>
|
||||
<notebook>
|
||||
<page string="Template" name="template">
|
||||
<field name="template" placeholder="e.g. Once upon a time..." />
|
||||
<field
|
||||
name="template"
|
||||
placeholder="e.g. Once upon a time..."
|
||||
/>
|
||||
</page>
|
||||
<page string="Documents" name="documents">
|
||||
<field name="content" widget="html" class="oe_view_only" options='{"safe": True}' />
|
||||
<field
|
||||
name="content"
|
||||
widget="html"
|
||||
class="oe_view_only"
|
||||
options='{"safe": True}'
|
||||
/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers" />
|
||||
<field name="message_ids" widget="mail_thread" />
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_category_tree" model="ir.ui.view">
|
||||
<field name="name">document.page.category.tree</field>
|
||||
<field name="model">document.page</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Categories">
|
||||
<field name="name"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="create_uid" invisible="1"/>
|
||||
<field name="write_uid"/>
|
||||
<field name="write_date"/>
|
||||
<field name="name" />
|
||||
<field name="parent_id" />
|
||||
<field name="create_uid" invisible="1" />
|
||||
<field name="write_uid" />
|
||||
<field name="write_date" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="view_document_category_filter" model="ir.ui.view">
|
||||
<field name="name">document.page.category.search</field>
|
||||
<field name="model">document.page</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Document Category">
|
||||
<field name="name" string="Content"
|
||||
filter_domain="['|', ('name','ilike',self), ('template','ilike',self)]"/>
|
||||
<field name="parent_id"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="content_uid"/>
|
||||
<field
|
||||
name="name"
|
||||
string="Content"
|
||||
filter_domain="['|', ('name','ilike',self), ('template','ilike',self)]"
|
||||
/>
|
||||
<field name="parent_id" />
|
||||
<field name="create_uid" />
|
||||
<field name="content_uid" />
|
||||
<group expand="0" string="Group By...">
|
||||
<filter name="group_by_category" string="Category" context="{'group_by':'parent_id'}"/>
|
||||
<filter name="group_by_author" string="Author" context="{'group_by':'create_uid'}"/>
|
||||
<filter name="group_by_last_contributor" string="Last Contributor" context="{'group_by':'content_uid'}"/>
|
||||
<filter
|
||||
name="group_by_category"
|
||||
string="Category"
|
||||
context="{'group_by':'parent_id'}"
|
||||
/>
|
||||
<filter
|
||||
name="group_by_author"
|
||||
string="Author"
|
||||
context="{'group_by':'create_uid'}"
|
||||
/>
|
||||
<filter
|
||||
name="group_by_last_contributor"
|
||||
string="Last Contributor"
|
||||
context="{'group_by':'content_uid'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Category Action -->
|
||||
<record id="action_category" model="ir.actions.act_window">
|
||||
<field name="name">Category</field>
|
||||
@ -77,29 +102,26 @@
|
||||
<field name="domain">[('type','=','category')]</field>
|
||||
<field name="context">{'default_type': 'category'}</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
<field name="view_id" ref="view_category_tree"/>
|
||||
<field name="search_view_id" ref="view_document_category_filter"/>
|
||||
<field name="view_id" ref="view_category_tree" />
|
||||
<field name="search_view_id" ref="view_document_category_filter" />
|
||||
</record>
|
||||
|
||||
<record id="action_category_view_tree" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="0" />
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_category_tree"/>
|
||||
<field name="act_window_id" ref="action_category"/>
|
||||
<field name="view_id" ref="view_category_tree" />
|
||||
<field name="act_window_id" ref="action_category" />
|
||||
</record>
|
||||
|
||||
<record id="action_category_view_form" model="ir.actions.act_window.view">
|
||||
<field name="sequence" eval="5" />
|
||||
<field name="view_mode">form</field>
|
||||
<field name="view_id" ref="view_category_form"/>
|
||||
<field name="act_window_id" ref="action_category"/>
|
||||
<field name="view_id" ref="view_category_form" />
|
||||
<field name="act_window_id" ref="action_category" />
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_category"
|
||||
parent="menu_wiki"
|
||||
name="Categories"
|
||||
action="action_category"
|
||||
sequence="20"/>
|
||||
|
||||
|
||||
<menuitem
|
||||
id="menu_category"
|
||||
parent="menu_wiki"
|
||||
name="Categories"
|
||||
action="action_category"
|
||||
sequence="20"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,38 +1,39 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" ?>
|
||||
<odoo>
|
||||
|
||||
<!-- History Tree view -->
|
||||
<record model="ir.ui.view" id="view_wiki_history_tree">
|
||||
<field name="name">document.page.history.tree</field>
|
||||
<field name="model">document.page.history</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Document History">
|
||||
<field name="id"/>
|
||||
<field name="page_id"/>
|
||||
<field name="name"/>
|
||||
<field name="summary"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="create_date"/>
|
||||
<field name="id" />
|
||||
<field name="page_id" />
|
||||
<field name="name" />
|
||||
<field name="summary" />
|
||||
<field name="create_uid" />
|
||||
<field name="create_date" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- History Search view -->
|
||||
<record id="view_wiki_history_filter" model="ir.ui.view">
|
||||
<field name="name">document.page.history.search</field>
|
||||
<field name="model">document.page.history</field>
|
||||
<field name="arch" type="xml">
|
||||
<search string="Document Page History">
|
||||
<field name="page_id"/>
|
||||
<field name="content"/>
|
||||
<field name="create_uid"/>
|
||||
<field name="page_id" />
|
||||
<field name="content" />
|
||||
<field name="create_uid" />
|
||||
<group expand="0" string="Group By...">
|
||||
<filter name="group_by_author" string="Author" context="{'group_by':'create_uid'}" />
|
||||
<filter
|
||||
name="group_by_author"
|
||||
string="Author"
|
||||
context="{'group_by':'create_uid'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- History Form view -->
|
||||
<record model="ir.ui.view" id="wiki_history_form">
|
||||
<field name="name">document.page.history.form</field>
|
||||
@ -40,50 +41,60 @@
|
||||
<field name="arch" type="xml">
|
||||
<form string="Document Page History">
|
||||
<sheet>
|
||||
<h1><field name="page_id" readonly="1"/></h1>
|
||||
<h1>
|
||||
<field name="page_id" readonly="1" />
|
||||
</h1>
|
||||
<group>
|
||||
<group>
|
||||
<field name="create_uid" readonly="1"/>
|
||||
<field name="create_date" readonly="1"/>
|
||||
<field name="create_uid" readonly="1" />
|
||||
<field name="create_date" readonly="1" />
|
||||
</group>
|
||||
</group>
|
||||
<group>
|
||||
<field name="name" placeholder="Rev 01"/>
|
||||
<field name="summary" placeholder="eg: Changed ... for ..."/>
|
||||
<field name="name" placeholder="Rev 01" />
|
||||
<field name="summary" placeholder="eg: Changed ... for ..." />
|
||||
</group>
|
||||
<notebook>
|
||||
<page name="content" string="Content">
|
||||
<field name="content" widget="html" placeholder="e.g. Once upon a time..." options="{'safe': True}"/>
|
||||
<field
|
||||
name="content"
|
||||
widget="html"
|
||||
placeholder="e.g. Once upon a time..."
|
||||
options="{'safe': True}"
|
||||
/>
|
||||
</page>
|
||||
<page name="diff" string="Changes">
|
||||
<field name="diff" widget="html" style="overflow-x: scroll" />
|
||||
<field
|
||||
name="diff"
|
||||
widget="html"
|
||||
style="overflow-x: scroll"
|
||||
/>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- History Action -->
|
||||
<record model="ir.actions.act_window" id="action_history">
|
||||
<field name="name">Page history</field>
|
||||
<field name="res_model">document.page.history</field>
|
||||
<field name="view_mode">tree,form</field>
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_page_history"
|
||||
<menuitem
|
||||
id="menu_page_history"
|
||||
parent="menu_wiki"
|
||||
name="Pages history"
|
||||
action="action_history"
|
||||
sequence="30"
|
||||
groups="base.group_no_one" />
|
||||
|
||||
<act_window id="action_related_page_history"
|
||||
groups="base.group_no_one"
|
||||
/>
|
||||
<act_window
|
||||
id="action_related_page_history"
|
||||
context="{'search_default_page_id': [active_id], 'default_page_id': active_id}"
|
||||
domain="[('page_id','=',active_id)]"
|
||||
name="Page History"
|
||||
res_model="document.page.history"
|
||||
binding_model="document.page"/>
|
||||
|
||||
|
||||
binding_model="document.page"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,16 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<template id="report_documentpage_doc">
|
||||
<t t-call="web.external_layout">
|
||||
|
||||
<div class="page">
|
||||
<h1 t-field="doc.name" />
|
||||
<div t-raw="doc.content" />
|
||||
</div>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="report_documentpage">
|
||||
<t t-call="web.html_container">
|
||||
<t t-foreach="docs" t-as="doc">
|
||||
@ -18,7 +15,6 @@
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<report
|
||||
id="report_document_page"
|
||||
string="Document Page"
|
||||
@ -27,5 +23,4 @@
|
||||
file="document_page.report_documentpage"
|
||||
name="document_page.report_documentpage"
|
||||
/>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<!-- Create Menu From view -->
|
||||
<record id="view_wiki_create_menu" model="ir.ui.view">
|
||||
<field name="name">Create Menu</field>
|
||||
@ -12,25 +11,24 @@
|
||||
<field name="menu_parent_id" />
|
||||
</group>
|
||||
<footer>
|
||||
<button name="document_page_menu_create"
|
||||
string="Create Menu"
|
||||
type="object"
|
||||
class="oe_highlight" />
|
||||
<button
|
||||
name="document_page_menu_create"
|
||||
string="Create Menu"
|
||||
type="object"
|
||||
class="oe_highlight"
|
||||
/>
|
||||
or
|
||||
<button string="Cancel"
|
||||
class="oe_link"
|
||||
special="cancel" />
|
||||
<button string="Cancel" class="oe_link" special="cancel" />
|
||||
</footer>
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<act_window
|
||||
id="action_related_page_create_menu"
|
||||
name="Create Menu"
|
||||
res_model="document.page.create.menu"
|
||||
target="new"
|
||||
view_mode="form"
|
||||
binding_model="document.page"/>
|
||||
|
||||
id="action_related_page_create_menu"
|
||||
name="Create Menu"
|
||||
res_model="document.page.create.menu"
|
||||
target="new"
|
||||
view_mode="form"
|
||||
binding_model="document.page"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<!-- Create Index Form view -->
|
||||
<record id="view_wiki_show_diff" model="ir.ui.view">
|
||||
<field name="name">Show Difference</field>
|
||||
@ -14,14 +13,13 @@
|
||||
</form>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Create Index Action Window -->
|
||||
<act_window
|
||||
id="action_view_wiki_show_diff_values"
|
||||
name="Difference"
|
||||
res_model="wizard.document.page.history.show_diff"
|
||||
binding_model="document.page.history"
|
||||
view_mode="form"
|
||||
target="new"/>
|
||||
|
||||
id="action_view_wiki_show_diff_values"
|
||||
name="Difference"
|
||||
res_model="wizard.document.page.history.show_diff"
|
||||
binding_model="document.page.history"
|
||||
view_mode="form"
|
||||
target="new"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record model="ir.module.category" id="module_category_knowledge">
|
||||
<field name="name">Knowledge</field>
|
||||
<field name="description">Manage documents and knowledge-related
|
||||
@ -8,5 +7,4 @@
|
||||
</field>
|
||||
<field name="sequence">30</field>
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,8 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="base.user_admin" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('knowledge.group_document_user'))]"/>
|
||||
<field name="groups_id" eval="[(4,ref('knowledge.group_document_user'))]" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,8 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo noupdate="1">
|
||||
|
||||
<record id="base.user_demo" model="res.users">
|
||||
<field name="groups_id" eval="[(4,ref('knowledge.group_document_user'))]"/>
|
||||
<field name="groups_id" eval="[(4,ref('knowledge.group_document_user'))]" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,16 +1,13 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="group_document_user" model="res.groups">
|
||||
<field name="name">Knowledge user</field>
|
||||
<field name="category_id" ref="module_category_knowledge"/>
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]"/>
|
||||
<field name="category_id" ref="module_category_knowledge" />
|
||||
<field name="users" eval="[(4, ref('base.user_root'))]" />
|
||||
</record>
|
||||
|
||||
<record id="group_ir_attachment_user" model="res.groups">
|
||||
<field name="name">Central access to Documents</field>
|
||||
<field name="category_id" ref="base.module_category_hidden"/>
|
||||
<field name="implied_ids" eval="[(4, ref('group_document_user'))]"/>
|
||||
<field name="category_id" ref="base.module_category_hidden" />
|
||||
<field name="implied_ids" eval="[(4, ref('group_document_user'))]" />
|
||||
</record>
|
||||
|
||||
</odoo>
|
||||
|
@ -1,51 +1,54 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="knowledge_action_documents" model="ir.actions.act_window">
|
||||
<field name="name">Documents</field>
|
||||
<field name="res_model">ir.attachment</field>
|
||||
<field name="view_mode">kanban,tree,form</field>
|
||||
<field name="context">{'search_default_user_documents': True}</field>
|
||||
</record>
|
||||
|
||||
<record id="ir_attachment_view_user_documents" model="ir.ui.view">
|
||||
<field name="name">Documents search view: additional filters</field>
|
||||
<field name="model">ir.attachment</field>
|
||||
<field name="inherit_id" ref="base.view_attachment_search"/>
|
||||
<field name="inherit_id" ref="base.view_attachment_search" />
|
||||
<field name="arch" type="xml">
|
||||
<search>
|
||||
<field name="res_model"/>
|
||||
<field name="index_content"/>
|
||||
<filter name="user_documents" string="Documents"
|
||||
domain="[('res_model', 'not like', 'ir.%'), ('res_model', '!=', False)]"/>
|
||||
<field name="res_model" />
|
||||
<field name="index_content" />
|
||||
<filter
|
||||
name="user_documents"
|
||||
string="Documents"
|
||||
domain="[('res_model', 'not like', 'ir.%'), ('res_model', '!=', False)]"
|
||||
/>
|
||||
<group string="Group by">
|
||||
<filter name="group_model" string="Model"
|
||||
context="{'group_by': 'res_model'}"/>
|
||||
<filter
|
||||
name="group_model"
|
||||
string="Model"
|
||||
context="{'group_by': 'res_model'}"
|
||||
/>
|
||||
</group>
|
||||
</search>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<!-- Top menu item -->
|
||||
<menuitem
|
||||
id="menu_document_root"
|
||||
name="Knowledge"
|
||||
groups="knowledge.group_document_user"
|
||||
web_icon="knowledge,static/description/icon.png"
|
||||
sequence="116"/>
|
||||
|
||||
sequence="116"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_document_section"
|
||||
name="Documents"
|
||||
groups="knowledge.group_ir_attachment_user"
|
||||
parent="menu_document_root"
|
||||
sequence="150"/>
|
||||
|
||||
sequence="150"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_document"
|
||||
name="Documents"
|
||||
action="knowledge_action_documents"
|
||||
parent="menu_document_section"
|
||||
sequence="0"/>
|
||||
|
||||
sequence="0"
|
||||
/>
|
||||
</odoo>
|
||||
|
@ -1,68 +1,75 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<odoo>
|
||||
|
||||
<record id="view_knowledge_configuration" model="ir.ui.view">
|
||||
<field name="name">res.config.settings.view.form.inherit.knowledge</field>
|
||||
<field name="model">res.config.settings</field>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form"/>
|
||||
<field name="priority" eval="90"/>
|
||||
<field name="inherit_id" ref="base.res_config_settings_view_form" />
|
||||
<field name="priority" eval="90" />
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//div[hasclass('settings')]" position="inside">
|
||||
<div class="app_settings_block" data-string="Knowledge"
|
||||
string="Knowledge" data-key="knowledge">
|
||||
<div
|
||||
class="app_settings_block"
|
||||
data-string="Knowledge"
|
||||
string="Knowledge"
|
||||
data-key="knowledge"
|
||||
>
|
||||
<h2>Knowledge and Documents Management</h2>
|
||||
<div class="row mt16 o_settings_container"
|
||||
id="maintenance_mode_setting">
|
||||
<div
|
||||
class="row mt16 o_settings_container"
|
||||
id="maintenance_mode_setting"
|
||||
>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_attachment_indexation"/>
|
||||
<field name="module_attachment_indexation" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_attachment_indexation"/>
|
||||
<label for="module_attachment_indexation" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="group_ir_attachment_user"/>
|
||||
<field name="group_ir_attachment_user" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="group_ir_attachment_user"/>
|
||||
<label for="group_ir_attachment_user" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_document_page"/>
|
||||
<field name="module_document_page" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_document_page"/>
|
||||
<label for="module_document_page" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_document_page_approval"/>
|
||||
<field name="module_document_page_approval" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_document_page_approval"/>
|
||||
<label for="module_document_page_approval" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<h2>Connect with an external DMS</h2>
|
||||
<div class="row mt16 o_settings_container"
|
||||
id="maintenance_notification_setting">
|
||||
<div
|
||||
class="row mt16 o_settings_container"
|
||||
id="maintenance_notification_setting"
|
||||
>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_cmis_read"/>
|
||||
<field name="module_cmis_read" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_cmis_read"/>
|
||||
<label for="module_cmis_read" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-12 col-md-12 o_setting_box">
|
||||
<div class="o_setting_left_pane">
|
||||
<field name="module_cmis_write"/>
|
||||
<field name="module_cmis_write" />
|
||||
</div>
|
||||
<div class="o_setting_right_pane">
|
||||
<label for="module_cmis_write"/>
|
||||
<label for="module_cmis_write" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -74,20 +81,23 @@
|
||||
<field name="name">Settings</field>
|
||||
<field name="type">ir.actions.act_window</field>
|
||||
<field name="res_model">res.config.settings</field>
|
||||
<field name="view_id" ref="view_knowledge_configuration"/>
|
||||
<field name="view_id" ref="view_knowledge_configuration" />
|
||||
<field name="view_mode">form</field>
|
||||
<field name="target">inline</field>
|
||||
<field name="context">{'module': 'knowledge'}</field>
|
||||
</record>
|
||||
<menuitem id="menu_document_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_document_root"
|
||||
groups="base.group_system"
|
||||
sequence="200"/>
|
||||
<menuitem id="menu_knowledge_configuration"
|
||||
name="Settings"
|
||||
parent="menu_document_configuration"
|
||||
sequence="0"
|
||||
action="action_knowledge_configuration"/>
|
||||
|
||||
<menuitem
|
||||
id="menu_document_configuration"
|
||||
name="Configuration"
|
||||
parent="menu_document_root"
|
||||
groups="base.group_system"
|
||||
sequence="200"
|
||||
/>
|
||||
<menuitem
|
||||
id="menu_knowledge_configuration"
|
||||
name="Settings"
|
||||
parent="menu_document_configuration"
|
||||
sequence="0"
|
||||
action="action_knowledge_configuration"
|
||||
/>
|
||||
</odoo>
|
||||
|
Loading…
Reference in New Issue
Block a user