Compare commits

..

10 Commits

Author SHA1 Message Date
jscampucci
4bf8cb0e85 [WIP] clean pre commit
Some checks failed
pre-commit / pre-commit (pull_request) Failing after 1m26s
2025-09-17 16:34:48 +02:00
jscampucci
5e8788a7d7 [WIP] remove cache from pre-commit 2025-09-17 16:34:48 +02:00
jscampucci
fd40a6279a [WIP] cache tests 2025-09-17 16:34:48 +02:00
jscampucci
6cc18b254a [WIP] test pre-commit 2025-09-17 16:34:48 +02:00
jscampucci
7c5a1fcec5 [WIP] test pre commit 2025-09-17 16:34:48 +02:00
jscampucci
2916b05ede [WIP] precommit test 2025-09-17 16:34:48 +02:00
jscampucci
53eb3c0fb9 [WIP] test readme generation 2025-09-17 16:34:48 +02:00
jscampucci
b25973431f [WIP] test pre-commit readme 2025-09-17 16:34:48 +02:00
jscampucci
a9f4ec3986 [WIP] test pre-commit 2025-09-17 16:34:01 +02:00
jscampucci
30ab1c8d0f [WIP] test pre-commit 2025-09-17 16:33:49 +02:00
24 changed files with 989 additions and 585 deletions

View File

@@ -1,42 +0,0 @@
#!/bin/bash
#
# Run the Python tests of the given Odoo modules.
#
# This script is meant to be executed *inside* an Elabore doodba image
# (docker.0k.io/mirror/odoo:rc_<version>-ELABORE-LIGHT), with a
# PostgreSQL service reachable at $PGHOST. The modules under test are
# read from the current working directory (the checked-out repository),
# which is prepended to the addons path so that the PR's code takes
# precedence over the modules already baked in the image.
#
# Usage: odoo-tests.sh <module1,module2,...>
set -euo pipefail
modules="${1:?usage: odoo-tests.sh <module1,module2,...>}"
export PGHOST=postgres
export PGUSER=odoo
export PGPASSWORD=odoopassword
export PGDATABASE="test_$(basename "$PWD" | tr '.-' '__')"
export WITHOUT_DEMO=all
export DB_FILTER='.*'
# Generate /opt/odoo/auto/odoo.conf from the environment and wait for
# the database to accept connections.
/opt/odoo/common/entrypoint
# Odoo test-tags format: "/module1,/module2" (one leading slash).
tags="/$(echo "$modules" | tr ',' ',/')"
exec odoo \
--config=/opt/odoo/auto/odoo.conf \
--max-cron-threads=0 \
--limit-time-real=10000 \
--workers=0 \
--test-enable \
--stop-after-init \
--addons-path="$PWD,/opt/odoo/auto/addons" \
-d "$PGDATABASE" \
-i "$modules" \
--test-tags "$tags"

View File

@@ -2,6 +2,8 @@ name: pre-commit
on: on:
pull_request: pull_request:
branches:
- "16.0*"
jobs: jobs:
pre-commit: pre-commit:
@@ -13,10 +15,10 @@ jobs:
python-version: "3.11" python-version: "3.11"
- name: Get python version - name: Get python version
run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
- uses: https://gitea.com/actions/cache@v3 # - uses: actions/cache@v4
with: # with:
path: ~/.cache/pre-commit # path: ~/.cache/pre-commit
key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }} # key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
- name: Install pre-commit - name: Install pre-commit
run: pip install pre-commit run: pip install pre-commit
- name: Run pre-commit - name: Run pre-commit

View File

@@ -1,79 +0,0 @@
name: tests
on:
pull_request:
branches:
- "18.0*"
workflow_dispatch:
jobs:
test:
runs-on: odoo-ci
container:
image: docker.0k.io/mirror/odoo:rc_18.0-ELABORE-LIGHT
services:
postgres:
image: docker.0k.io/postgres:17.2.0-myc
env:
POSTGRES_USER: odoo
POSTGRES_PASSWORD: odoopassword
POSTGRES_DB: postgres
steps:
# The doodba image ships no Node.js, so actions/checkout@v4 cannot
# run here. The repository is private, so the job token is required.
- name: Checkout
env:
SECRET_GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }}
SECRET_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -eu
token="${GITEA_TOKEN:-${GITHUB_TOKEN:-${SECRET_GITEA_TOKEN:-${SECRET_GITHUB_TOKEN:-}}}}"
if [ -z "$token" ]; then
echo "::error::No job token available to clone the repository"
exit 1
fi
server="${GITHUB_SERVER_URL:-https://git.elabore.coop}"
repo="${GITHUB_REPOSITORY:?GITHUB_REPOSITORY is not set}"
ref="${GITHUB_REF:-${GITHUB_SHA:?neither GITHUB_REF nor GITHUB_SHA is set}}"
auth_url="$(printf '%s' "${server%/}/${repo}.git" |
sed -E "s#^https://#https://${token}@#")"
git init -q .
git config --global --add safe.directory "$PWD"
git remote add origin "$auth_url"
git fetch -q --depth=1 origin "$ref"
git checkout -q FETCH_HEAD
- name: Detect changed modules
id: changed
run: |
set -eu
if [ -n "${GITHUB_BASE_REF:-}" ]; then
git fetch -q --depth=1 origin "refs/heads/$GITHUB_BASE_REF"
base_rev="FETCH_HEAD"
scope="diff against $GITHUB_BASE_REF"
else
base_rev=""
scope="all installable modules (manual run)"
fi
if [ -n "$base_rev" ]; then
modules="$(
git diff --name-only "$base_rev" HEAD |
awk -F/ '{print $1}' | sort -u |
while read -r dir; do
[ -f "$dir/__manifest__.py" ] && echo "$dir"
done | paste -sd, -
)"
else
modules="$(
for dir in */; do
dir="${dir%/}"
[ -f "$dir/__manifest__.py" ] && echo "$dir"
done | paste -sd, -
)"
fi
echo "modules=$modules" >> "$GITHUB_OUTPUT"
echo "Modules to test ($scope): ${modules:-<none>}"
- name: Run Odoo tests
if: steps.changed.outputs.modules != ''
run: bash .gitea/scripts/odoo-tests.sh "${{ steps.changed.outputs.modules }}"

88
.gitignore vendored
View File

@@ -1,88 +0,0 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
/.venv
/.pytest_cache
/.ruff_cache
# C extensions
*.so
# Distribution / packaging
.Python
env/
bin/
build/
develop-eggs/
dist/
eggs/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
*.eggs
# Windows installers
*.msi
# Debian packages
*.deb
# Redhat packages
*.rpm
# MacOS packages
*.dmg
*.pkg
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.cache
nosetests.xml
coverage.xml
# Translations
*.mo
# Pycharm
.idea
# Eclipse
.settings
# Visual Studio cache/options directory
.vs/
.vscode
# OSX Files
.DS_Store
# Django stuff:
*.log
# Mr Developer
.mr.developer.cfg
.project
.pydevproject
# Rope
.ropeproject
# Sphinx documentation
docs/_build/
# Backup files
*~
*.swp
# OCA rules
!static/lib/

View File

@@ -22,7 +22,7 @@ exclude: |
(LICENSE.*|COPYING.*) (LICENSE.*|COPYING.*)
default_language_version: default_language_version:
python: python3 python: python3
node: "22.9.0" node: "16.17.0"
repos: repos:
- repo: local - repo: local
hooks: hooks:
@@ -38,12 +38,8 @@ repos:
entry: found a en.po file entry: found a en.po file
language: fail language: fail
files: '[a-zA-Z0-9_]*/i18n/en\.po$' files: '[a-zA-Z0-9_]*/i18n/en\.po$'
- repo: https://github.com/sbidoul/whool
rev: v1.3
hooks:
- id: whool-init
- repo: https://github.com/oca/maintainer-tools - repo: https://github.com/oca/maintainer-tools
rev: b89f767503be6ab2b11e4f50a7557cb20066e667 rev: f9b919b9868143135a9c9cb03021089cabba8223
hooks: hooks:
# update the NOT INSTALLABLE ADDONS section above # update the NOT INSTALLABLE ADDONS section above
- id: oca-update-pre-commit-excluded-addons - id: oca-update-pre-commit-excluded-addons
@@ -53,13 +49,16 @@ repos:
$(git rev-parse --show-toplevel))"' $(git rev-parse --show-toplevel))"'
- id: oca-gen-addon-readme - id: oca-gen-addon-readme
entry: entry:
bash -c 'oca-gen-addon-readme --addons-dir=. --branch=$(git symbolic-ref bash -c 'oca-gen-addon-readme
--addons-dir=.
--branch=$(git symbolic-ref
refs/remotes/origin/HEAD | sed "s@^refs/remotes/origin/@@") refs/remotes/origin/HEAD | sed "s@^refs/remotes/origin/@@")
--repo-name=$(basename $(git rev-parse --show-toplevel)) --org-name="Elabore" --repo-name=$(basename $(git rev-parse --show-toplevel))
--if-source-changed --keep-source-digest --convert-fragments-to-markdown' --org-name="Elabore"
- id: oca-gen-external-dependencies --if-source-changed --keep-source-digest'
- repo: https://github.com/OCA/odoo-pre-commit-hooks - repo: https://github.com/OCA/odoo-pre-commit-hooks
rev: v0.0.33 rev: v0.1.4
hooks: hooks:
- id: oca-checks-odoo-module - id: oca-checks-odoo-module
- id: oca-checks-po - id: oca-checks-po
@@ -78,8 +77,8 @@ repos:
files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$ files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
language: node language: node
additional_dependencies: additional_dependencies:
- "prettier@3.3.3" - "prettier@2.7.1"
- "@prettier/plugin-xml@3.4.1" - "@prettier/plugin-xml@2.2.0"
- repo: local - repo: local
hooks: hooks:
- id: eslint - id: eslint
@@ -92,11 +91,10 @@ repos:
types: [javascript] types: [javascript]
language: node language: node
additional_dependencies: additional_dependencies:
- "eslint@9.12.0" - "eslint@8.24.0"
- "eslint-plugin-jsdoc@50.3.1" - "eslint-plugin-jsdoc@"
- "globals@16.0.0"
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.6.0 rev: v5.0.0
hooks: hooks:
- id: trailing-whitespace - id: trailing-whitespace
# exclude autogenerated files # exclude autogenerated files
@@ -117,8 +115,23 @@ repos:
- id: check-xml - id: check-xml
- id: mixed-line-ending - id: mixed-line-ending
args: ["--fix=lf"] args: ["--fix=lf"]
- repo: https://github.com/PyCQA/docformatter
rev: v1.7.7
hooks:
- id: docformatter
args: [
"--in-place", # modify the files
"--recursive", # run on all the files
"--wrap-summaries",
"88", # max length of 1st line
"--wrap-descriptions",
"88", # max length of other lines
"--pre-summary-newline", # new line before a long summary
"--make-summary-multi-line", # force summary on multilines
]
additional_dependencies: ["tomli"] # if Python <3.11
- repo: https://github.com/astral-sh/ruff-pre-commit - repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.6.8 rev: v0.12.0
hooks: hooks:
- id: ruff - id: ruff
args: [--fix, --exit-non-zero-on-fix] args: [--fix, --exit-non-zero-on-fix]

View File

@@ -10,7 +10,7 @@ manifest-required-authors=Elabore
manifest-required-keys=license manifest-required-keys=license
manifest-deprecated-keys=description,active manifest-deprecated-keys=description,active
license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid-odoo-versions=18.0 valid-odoo-versions=16.0
[MESSAGES CONTROL] [MESSAGES CONTROL]
disable=all disable=all
@@ -25,25 +25,19 @@ disable=all
enable=anomalous-backslash-in-string, enable=anomalous-backslash-in-string,
api-one-deprecated, api-one-deprecated,
api-one-multi-together, api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase, class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority, dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv, duplicate-id-csv,
duplicate-key,
duplicate-xml-fields, duplicate-xml-fields,
duplicate-xml-record-id, duplicate-xml-record-id,
eval-referenced, eval-referenced,
incoherent-interpreter-exec-perm,
openerp-exception-warning,
redundant-modulename-xml,
relative-import,
rst-syntax-error,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
assignment-from-none,
attribute-deprecated,
dangerous-default-value,
development-status-allowed,
duplicate-key,
eval-used, eval-used,
incoherent-interpreter-exec-perm,
license-allowed, license-allowed,
manifest-author-string, manifest-author-string,
manifest-deprecated-key, manifest-deprecated-key,
@@ -54,68 +48,73 @@ enable=anomalous-backslash-in-string,
method-inverse, method-inverse,
method-required-super, method-required-super,
method-search, method-search,
openerp-exception-warning,
pointless-statement, pointless-statement,
pointless-string-statement, pointless-string-statement,
print-used, print-used,
redundant-keyword-arg, redundant-keyword-arg,
redundant-modulename-xml,
reimported, reimported,
relative-import,
return-in-init, return-in-init,
rst-syntax-error,
sql-injection, sql-injection,
too-few-format-args, too-few-format-args,
translation-field, translation-field,
translation-required, translation-required,
unreachable, unreachable,
use-vim-comment, use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
attribute-string-redundant,
character-not-valid-in-resource-link, character-not-valid-in-resource-link,
consider-merging-classes-inherited,
context-overridden,
create-user-wo-reset-password, create-user-wo-reset-password,
dangerous-filter-wo-user, dangerous-filter-wo-user,
dangerous-qweb-replace-wo-priority, dangerous-qweb-replace-wo-priority,
deprecated-data-xml-node, deprecated-data-xml-node,
deprecated-openerp-xml-node, deprecated-openerp-xml-node,
duplicate-po-message-definition, duplicate-po-message-definition,
file-not-used,
missing-newline-extrafiles,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
str-format-used,
unnecessary-utf8-coding-comment,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
attribute-string-redundant,
consider-merging-classes-inherited,
context-overridden,
except-pass, except-pass,
file-not-used,
invalid-commit, invalid-commit,
manifest-maintainers-list, manifest-maintainers-list,
missing-newline-extrafiles,
missing-readme, missing-readme,
missing-return, missing-return,
odoo-addons-relative-import, odoo-addons-relative-import,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
renamed-field-parameter, renamed-field-parameter,
resource-not-exist, resource-not-exist,
str-format-used,
test-folder-imported, test-folder-imported,
translation-contains-variable, translation-contains-variable,
translation-positional-used, translation-positional-used,
website-manifest-key-not-valid-uri,
external-request-timeout,
missing-manifest-dependency,
too-complex,,
create-user-wo-reset-password,
dangerous-filter-wo-user,
file-not-used,
missing-newline-extrafiles,
no-utf8-coding-comment,
old-api7-method-defined,
unnecessary-utf8-coding-comment, unnecessary-utf8-coding-comment,
website-manifest-key-not-valid-uri,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
external-request-timeout,
# messages that do not cause the lint step to fail # messages that do not cause the lint step to fail
consider-merging-classes-inherited, consider-merging-classes-inherited,
create-user-wo-reset-password,
dangerous-filter-wo-user,
deprecated-module, deprecated-module,
file-not-used,
invalid-commit, invalid-commit,
missing-manifest-dependency,
missing-newline-extrafiles,
missing-readme, missing-readme,
no-utf8-coding-comment,
odoo-addons-relative-import, odoo-addons-relative-import,
old-api7-method-defined,
redefined-builtin, redefined-builtin,
manifest-external-assets too-complex,
unnecessary-utf8-coding-comment
[REPORTS] [REPORTS]

View File

@@ -9,7 +9,7 @@ manifest-required-authors=Elabore
manifest-required-keys=license manifest-required-keys=license
manifest-deprecated-keys=description,active manifest-deprecated-keys=description,active
license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3 license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid-odoo-versions=18.0 valid-odoo-versions=16.0
[MESSAGES CONTROL] [MESSAGES CONTROL]
disable=all disable=all
@@ -17,25 +17,19 @@ disable=all
enable=anomalous-backslash-in-string, enable=anomalous-backslash-in-string,
api-one-deprecated, api-one-deprecated,
api-one-multi-together, api-one-multi-together,
assignment-from-none,
attribute-deprecated,
class-camelcase, class-camelcase,
dangerous-default-value,
dangerous-view-replace-wo-priority, dangerous-view-replace-wo-priority,
development-status-allowed,
duplicate-id-csv, duplicate-id-csv,
duplicate-key,
duplicate-xml-fields, duplicate-xml-fields,
duplicate-xml-record-id, duplicate-xml-record-id,
eval-referenced, eval-referenced,
incoherent-interpreter-exec-perm,
openerp-exception-warning,
redundant-modulename-xml,
relative-import,
rst-syntax-error,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
assignment-from-none,
attribute-deprecated,
dangerous-default-value,
development-status-allowed,
duplicate-key,
eval-used, eval-used,
incoherent-interpreter-exec-perm,
license-allowed, license-allowed,
manifest-author-string, manifest-author-string,
manifest-deprecated-key, manifest-deprecated-key,
@@ -46,50 +40,56 @@ enable=anomalous-backslash-in-string,
method-inverse, method-inverse,
method-required-super, method-required-super,
method-search, method-search,
openerp-exception-warning,
pointless-statement, pointless-statement,
pointless-string-statement, pointless-string-statement,
print-used, print-used,
redundant-keyword-arg, redundant-keyword-arg,
redundant-modulename-xml,
reimported, reimported,
relative-import,
return-in-init, return-in-init,
rst-syntax-error,
sql-injection, sql-injection,
too-few-format-args, too-few-format-args,
translation-field, translation-field,
translation-required, translation-required,
unreachable, unreachable,
use-vim-comment, use-vim-comment,
wrong-tabs-instead-of-spaces,
xml-syntax-error,
attribute-string-redundant,
character-not-valid-in-resource-link, character-not-valid-in-resource-link,
consider-merging-classes-inherited,
context-overridden,
create-user-wo-reset-password, create-user-wo-reset-password,
dangerous-filter-wo-user, dangerous-filter-wo-user,
dangerous-qweb-replace-wo-priority, dangerous-qweb-replace-wo-priority,
deprecated-data-xml-node, deprecated-data-xml-node,
deprecated-openerp-xml-node, deprecated-openerp-xml-node,
duplicate-po-message-definition, duplicate-po-message-definition,
file-not-used,
missing-newline-extrafiles,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
str-format-used,
unnecessary-utf8-coding-comment,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
attribute-string-redundant,
consider-merging-classes-inherited,
context-overridden,
except-pass, except-pass,
file-not-used,
invalid-commit, invalid-commit,
manifest-maintainers-list, manifest-maintainers-list,
missing-newline-extrafiles,
missing-readme, missing-readme,
missing-return, missing-return,
odoo-addons-relative-import, odoo-addons-relative-import,
old-api7-method-defined,
po-msgstr-variables,
po-syntax-error,
renamed-field-parameter, renamed-field-parameter,
resource-not-exist, resource-not-exist,
str-format-used,
test-folder-imported, test-folder-imported,
translation-contains-variable, translation-contains-variable,
translation-positional-used, translation-positional-used,
unnecessary-utf8-coding-comment,
website-manifest-key-not-valid-uri, website-manifest-key-not-valid-uri,
xml-attribute-translatable,
xml-deprecated-qweb-directive,
xml-deprecated-tree-attribute,
external-request-timeout external-request-timeout
[REPORTS] [REPORTS]

View File

@@ -1,2 +1,2 @@
*.*~ *.*~
*pyc *pyc

View File

@@ -1,45 +0,0 @@
# CRM Usability Misc
Various modifications of the CRM app to streamline the lead/opportunity form.
## Installation
Use the standard Odoo module installation procedure to install `crm_usability_misc`.
### Dependencies
- `base`
- `crm`
- `sales_team`
## Description
This module customizes the CRM lead/opportunity form view to simplify the layout and improve usability:
- **Hide Campaign and Medium fields** — Removes the entire Marketing group (`campaign_id`, `medium_id`) from the *Extra Information* tab.
- **Move "Source" and "Referred by" under Tags** — Relocates the `source_id` and `referred` fields directly after the `tag_ids` field for better visibility.
- **Move "Sales Team" under Phone** — Moves `team_id` from the *Misc* group to the main partner section (before `lost_reason_id`), with team creation and opening disabled (`no_open`, `no_create`).
## Known Issues / Roadmap
None yet.
## Bug Tracker
Bugs are tracked on [our issues page](https://github.com/elabore-coop/crm-tools/issues). In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smash it by providing detailed feedback.
## Credits
### Contributors
- [Elabore](https://elabore.coop) — Laetitia Da Costa
### Funders
The development of this module has been financially supported by:
- [Elabore](https://elabore.coop)
### Maintainer
This module is maintained by [Elabore](https://elabore.coop).

View File

@@ -0,0 +1,199 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
==================
crm usability misc
==================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:be78325679fda626093147ef1d7023041e2544e8c1cca85c4c7199e4848f8c6f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-Elabore%2Fcrm--tools-lightgray.png?logo=github
:target: https://github.com/Elabore/crm-tools/tree/16.0/crm_usability_misc
:alt: Elabore/crm-tools
|badge1| |badge2| |badge3|
[ This file must be max 2-3 paragraphs, and is required.
The goal of this document is to explain quickly the features of this
module: “what” this module does and “what” it is for. ]
Example:
This module extends the functionality of ... to support ... and to allow
users to ...
**Table of contents**
.. contents::
:local:
Use Cases / Context
===================
[ This file is optional but strongly suggested to allow end-users to
evaluate the module's usefulness in their context. ]
BUSINESS NEED: It should explain the “why” of the module:
- what is the business requirement that generated the need to develop
this module
- in which context or use cases this module can be useful (practical
examples are welcome!).
APPROACH: It could also explain the approach to address the mentioned
need.
USEFUL INFORMATION: It can also inform on related modules:
- modules it depends on and their features
- other modules that can work well together with this one
- suggested setups where the module is useful (eg: multicompany,
multi-website)
Installation
============
[ This file must only be present if there are very specific installation
instructions, such as installing non-python dependencies. The audience
is systems administrators. ]
To install this module, you need to:
1. Do this ...
Configuration
=============
[ This file is not always required; it should explain **how to configure
the module before using it**; it is aimed at users with administration
privileges.
Please be detailed on the path to configuration (eg: do you need to
activate developer mode?), describe step by step configurations and the
use of screenshots is strongly recommended.]
To configure this module, you need to:
- Go to *App* > Menu > Menu item
- Activate boolean… > save
- …
Usage
=====
[ This file is required and contains the instructions on **“how”** to
use the module for end-users.
If the module does not have a visible impact on the user interface, just
add the following sentence:
This module does not impact the user interface.
If that’s not the case, please make sure that every usage step is
covered and remember that images speak more than words!]
To use this module, you need to:
- Go to *App* > Menu > Menu item
*insert screenshot!*
- In “Contact” form, add a value to field *xyz* > save
*insert screenshot!*
- The value of *xyz* is now displayed in the list view.
*insert screenshot!*
Known issues / Roadmap
======================
[ Enumerate known caveats and future potential improvements. It is
mostly intended for end-users, and can also help potential new
contributors discovering new features to implement. ]
- ...
Changelog
=========
[ The change log. The goal of this file is to help readers understand
changes between version. The primary audience is end users and
integrators. Purely technical changes such as code refactoring must not
be mentioned here.
This file may contain ONE level of section titles, underlined with the ~
(tilde) character. Other section markers are forbidden and will likely
break the structure of the README.rst or other documents where this
fragment is included. ]
11.0.x.y.z (YYYY-MM-DD)
-----------------------
- [BREAKING] Breaking changes come first.
(`#70 <https://github.com/OCA/repo/issues/70>`__)
- [ADD] New feature. (`#74 <https://github.com/OCA/repo/issues/74>`__)
- [FIX] Correct this. (`#71 <https://github.com/OCA/repo/issues/71>`__)
11.0.x.y.z (YYYY-MM-DD)
-----------------------
- ...
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/Elabore/crm-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/Elabore/crm-tools/issues/new?body=module:%20crm_usability_misc%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* Elabore
Contributors
------------
- Firstname Lastname email.address@example.org (optional company website
url)
- Second Person second.person@example.org (optional company website url)
Other credits
-------------
[ This file is optional and contains additional credits, other than
authors, contributors, and maintainers. ]
The development of this module has been financially supported by:
- Company 1 name
- Company 2 name
Maintainers
-----------
This module is part of the `Elabore/crm-tools <https://github.com/Elabore/crm-tools/tree/16.0/crm_usability_misc>`_ project on GitHub.
You are welcome to contribute.

View File

@@ -2,17 +2,19 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{ {
"name": "CRM Usability Misc", "name": "crm usability misc",
"version": "18.0.1.0.0", "version": "16.0.1.0.0",
"author": "Elabore", "author": "Elabore",
"website": "https://elabore.coop", "website": "https://git.elabore.coop/elabore/crm-tools",
"maintainer": "Elabore", "maintainer": "Elabore",
"license": "AGPL-3", "license": "AGPL-3",
"category": "CRM", "category": "CRM",
"summary": "Various modifications of CRM app", "summary": "Various modifications of CRM app",
# any module necessary for this one to work correctly # any module necessary for this one to work correctly
"depends": [ "depends": [
"base","crm","sales_team", "base",
"crm",
"sales_team",
], ],
# always loaded # always loaded
"data": [ "data": [

View File

@@ -0,0 +1,10 @@
[ This file is not always required; it should explain **how to configure the module before using it**; it is aimed at users with administration privileges.
Please be detailed on the path to configuration (eg: do you need to activate developer mode?), describe step by step configurations and the use of screenshots is strongly recommended.]
To configure this module, you need to:
- Go to *App* > Menu > Menu item
- Activate boolean… > save
- …

View File

@@ -0,0 +1,16 @@
[ This file is optional but strongly suggested to allow end-users to evaluate the
module's usefulness in their context. ]
BUSINESS NEED:
It should explain the “why” of the module:
- what is the business requirement that generated the need to develop this module
- in which context or use cases this module can be useful (practical examples are welcome!).
APPROACH:
It could also explain the approach to address the mentioned need.
USEFUL INFORMATION:
It can also inform on related modules:
- modules it depends on and their features
- other modules that can work well together with this one
- suggested setups where the module is useful (eg: multicompany, multi-website)

View File

@@ -0,0 +1,2 @@
- Firstname Lastname <email.address@example.org> (optional company website url)
- Second Person <second.person@example.org> (optional company website url)

View File

@@ -0,0 +1,7 @@
[ This file is optional and contains additional credits, other than
authors, contributors, and maintainers. ]
The development of this module has been financially supported by:
- Company 1 name
- Company 2 name

View File

@@ -0,0 +1,7 @@
[ This file must be max 2-3 paragraphs, and is required.
The goal of this document is to explain quickly the features of this module: “what” this module does and “what” it is for. ]
Example:
This module extends the functionality of ... to support ... and to allow users to ...

View File

@@ -0,0 +1,22 @@
[ The change log. The goal of this file is to help readers
understand changes between version. The primary audience is
end users and integrators. Purely technical changes such as
code refactoring must not be mentioned here.
This file may contain ONE level of section titles, underlined
with the ~ (tilde) character. Other section markers are
forbidden and will likely break the structure of the README.rst
or other documents where this fragment is included. ]
## 11.0.x.y.z (YYYY-MM-DD)
- [BREAKING] Breaking changes come first.
([#70](https://github.com/OCA/repo/issues/70))
- [ADD] New feature.
([#74](https://github.com/OCA/repo/issues/74))
- [FIX] Correct this.
([#71](https://github.com/OCA/repo/issues/71))
## 11.0.x.y.z (YYYY-MM-DD)
- ...

View File

@@ -0,0 +1,7 @@
[ This file must only be present if there are very specific
installation instructions, such as installing non-python
dependencies. The audience is systems administrators. ]
To install this module, you need to:
1. Do this ...

View File

@@ -0,0 +1,5 @@
[ Enumerate known caveats and future potential improvements.
It is mostly intended for end-users, and can also help
potential new contributors discovering new features to implement. ]
- ...

View File

@@ -0,0 +1,21 @@
[ This file is required and contains the instructions on **“how”** to use the module for end-users.
If the module does not have a visible impact on the user interface, just add the following sentence:
> This module does not impact the user interface.
If that’s not the case, please make sure that every usage step is covered and remember that images speak more than words!]
To use this module, you need to:
- Go to *App* > Menu > Menu item
*insert screenshot!*
- In “Contact” form, add a value to field *xyz* > save
*insert screenshot!*
- The value of *xyz* is now displayed in the list view.
*insert screenshot!*

View File

@@ -0,0 +1,554 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="crm-usability-misc">
<h1>crm usability misc</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:be78325679fda626093147ef1d7023041e2544e8c1cca85c4c7199e4848f8c6f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/Elabore/crm-tools/tree/16.0/crm_usability_misc"><img alt="Elabore/crm-tools" src="https://img.shields.io/badge/github-Elabore%2Fcrm--tools-lightgray.png?logo=github" /></a></p>
<p>[ This file must be max 2-3 paragraphs, and is required.</p>
<p>The goal of this document is to explain quickly the features of this
module: “what” this module does and “what” it is for. ]</p>
<p>Example:</p>
<p>This module extends the functionality of … to support … and to allow
users to …</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#use-cases-context" id="toc-entry-1">Use Cases / Context</a></li>
<li><a class="reference internal" href="#installation" id="toc-entry-2">Installation</a></li>
<li><a class="reference internal" href="#configuration" id="toc-entry-3">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-4">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-5">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#changelog" id="toc-entry-6">Changelog</a><ul>
<li><a class="reference internal" href="#x-y-z-yyyy-mm-dd" id="toc-entry-7">11.0.x.y.z (YYYY-MM-DD)</a></li>
<li><a class="reference internal" href="#x-y-z-yyyy-mm-dd-1" id="toc-entry-8">11.0.x.y.z (YYYY-MM-DD)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-9">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-10">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-11">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-12">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-13">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-14">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="use-cases-context">
<h2><a class="toc-backref" href="#toc-entry-1">Use Cases / Context</a></h2>
<p>[ This file is optional but strongly suggested to allow end-users to
evaluate the module’s usefulness in their context. ]</p>
<p>BUSINESS NEED: It should explain the “why” of the module:</p>
<ul class="simple">
<li>what is the business requirement that generated the need to develop
this module</li>
<li>in which context or use cases this module can be useful (practical
examples are welcome!).</li>
</ul>
<p>APPROACH: It could also explain the approach to address the mentioned
need.</p>
<p>USEFUL INFORMATION: It can also inform on related modules:</p>
<ul class="simple">
<li>modules it depends on and their features</li>
<li>other modules that can work well together with this one</li>
<li>suggested setups where the module is useful (eg: multicompany,
multi-website)</li>
</ul>
</div>
<div class="section" id="installation">
<h2><a class="toc-backref" href="#toc-entry-2">Installation</a></h2>
<p>[ This file must only be present if there are very specific installation
instructions, such as installing non-python dependencies. The audience
is systems administrators. ]</p>
<p>To install this module, you need to:</p>
<ol class="arabic simple">
<li>Do this …</li>
</ol>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-3">Configuration</a></h2>
<p>[ This file is not always required; it should explain <strong>how to configure
the module before using it</strong>; it is aimed at users with administration
privileges.</p>
<p>Please be detailed on the path to configuration (eg: do you need to
activate developer mode?), describe step by step configurations and the
use of screenshots is strongly recommended.]</p>
<p>To configure this module, you need to:</p>
<ul class="simple">
<li>Go to <em>App</em> &gt; Menu &gt; Menu item</li>
<li>Activate boolean… &gt; save</li>
<li>…</li>
</ul>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-4">Usage</a></h2>
<p>[ This file is required and contains the instructions on <strong>“how”</strong> to
use the module for end-users.</p>
<p>If the module does not have a visible impact on the user interface, just
add the following sentence:</p>
<blockquote>
This module does not impact the user interface.</blockquote>
<p>If that’s not the case, please make sure that every usage step is
covered and remember that images speak more than words!]</p>
<p>To use this module, you need to:</p>
<ul>
<li><p class="first">Go to <em>App</em> &gt; Menu &gt; Menu item</p>
<p><em>insert screenshot!</em></p>
</li>
<li><p class="first">In “Contact” form, add a value to field <em>xyz</em> &gt; save</p>
<p><em>insert screenshot!</em></p>
</li>
<li><p class="first">The value of <em>xyz</em> is now displayed in the list view.</p>
<p><em>insert screenshot!</em></p>
</li>
</ul>
</div>
<div class="section" id="known-issues-roadmap">
<h2><a class="toc-backref" href="#toc-entry-5">Known issues / Roadmap</a></h2>
<p>[ Enumerate known caveats and future potential improvements. It is
mostly intended for end-users, and can also help potential new
contributors discovering new features to implement. ]</p>
<ul class="simple">
<li>…</li>
</ul>
</div>
<div class="section" id="changelog">
<h2><a class="toc-backref" href="#toc-entry-6">Changelog</a></h2>
<p>[ The change log. The goal of this file is to help readers understand
changes between version. The primary audience is end users and
integrators. Purely technical changes such as code refactoring must not
be mentioned here.</p>
<p>This file may contain ONE level of section titles, underlined with the ~
(tilde) character. Other section markers are forbidden and will likely
break the structure of the README.rst or other documents where this
fragment is included. ]</p>
<div class="section" id="x-y-z-yyyy-mm-dd">
<h3><a class="toc-backref" href="#toc-entry-7">11.0.x.y.z (YYYY-MM-DD)</a></h3>
<ul class="simple">
<li>[BREAKING] Breaking changes come first.
(<a class="reference external" href="https://github.com/OCA/repo/issues/70">#70</a>)</li>
<li>[ADD] New feature. (<a class="reference external" href="https://github.com/OCA/repo/issues/74">#74</a>)</li>
<li>[FIX] Correct this. (<a class="reference external" href="https://github.com/OCA/repo/issues/71">#71</a>)</li>
</ul>
</div>
<div class="section" id="x-y-z-yyyy-mm-dd-1">
<h3><a class="toc-backref" href="#toc-entry-8">11.0.x.y.z (YYYY-MM-DD)</a></h3>
<ul class="simple">
<li>…</li>
</ul>
</div>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-9">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/Elabore/crm-tools/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/Elabore/crm-tools/issues/new?body=module:%20crm_usability_misc%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-10">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-11">Authors</a></h3>
<ul class="simple">
<li>Elabore</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-12">Contributors</a></h3>
<ul class="simple">
<li>Firstname Lastname <a class="reference external" href="mailto:email.address&#64;example.org">email.address&#64;example.org</a> (optional company website
url)</li>
<li>Second Person <a class="reference external" href="mailto:second.person&#64;example.org">second.person&#64;example.org</a> (optional company website url)</li>
</ul>
</div>
<div class="section" id="other-credits">
<h3><a class="toc-backref" href="#toc-entry-13">Other credits</a></h3>
<p>[ This file is optional and contains additional credits, other than
authors, contributors, and maintainers. ]</p>
<p>The development of this module has been financially supported by:</p>
<ul class="simple">
<li>Company 1 name</li>
<li>Company 2 name</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-14">Maintainers</a></h3>
<p>This module is part of the <a class="reference external" href="https://github.com/Elabore/crm-tools/tree/16.0/crm_usability_misc">Elabore/crm-tools</a> project on GitHub.</p>
<p>You are welcome to contribute.</p>
</div>
</div>
</div>
</div>
</body>
</html>

View File

@@ -1,24 +1,35 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8" ?>
<odoo> <odoo>
<data> <record id="crm_lead_form_inherit_usability_misc" model="ir.ui.view">
<record id="crm_lead_form_inherit_usability_misc" model="ir.ui.view"> <field name="name">crm.lead.form.inherit.usability.misc</field>
<field name="name">crm.lead.form.inherit.usability.misc</field> <field name="model">crm.lead</field>
<field name="model">crm.lead</field> <field name="inherit_id" ref="crm.crm_lead_view_form" />
<field name="inherit_id" ref="crm.crm_lead_view_form" /> <field name="arch" type="xml">
<field name="arch" type="xml"> <!-- remove chapter Marketing in page Extra Information -->
<!-- remove chapter Marketing in page Extra Information --> <xpath
<xpath expr="//page[@name='lead']//field[@name='campaign_id']/ancestor::group[1]" position="replace" /> expr="//page[@name='lead']//field[@name='campaign_id']/ancestor::group[1]"
<!-- move source_id and referred fields under Tags field --> position="replace"
<xpath expr="//field[@name='tag_ids']" position="after" > />
<field name="source_id"/> <!-- move source_id and referred fields under Tags field -->
<field name="referred"/> <xpath expr="//field[@name='tag_ids']" position="after">
</xpath> <field name="source_id" />
<!-- move team_id under Phone field --> <field name="referred" />
<xpath expr="//group[@name='Misc']//field[@name='team_id']" position="replace" /> </xpath>
<xpath expr="//group[@name='opportunity_partner']//field[@name='lost_reason_id']" position="before" > <!-- move team_id under Phone field -->
<field name="team_id" options="{'no_open': True, 'no_create': True}" context="{'kanban_view_ref' : 'sales_team.crm_team_view_kanban'}"/> <xpath
</xpath> expr="//group[@name='Misc']//field[@name='team_id']"
</field> position="replace"
</record> />
</data> <xpath
expr="//group[@name='opportunity_partner']//field[@name='lost_reason_id']"
position="before"
>
<field
name="team_id"
options="{'no_open': True, 'no_create': True}"
context="{'kanban_view_ref' : 'sales_team.crm_team_view_kanban'}"
/>
</xpath>
</field>
</record>
</odoo> </odoo>

View File

@@ -1,205 +0,0 @@
var globals = require('globals');
jsdoc = require("eslint-plugin-jsdoc");
const config = [{
plugins: {
jsdoc,
},
languageOptions: {
globals: {
_: "readonly",
$: "readonly",
fuzzy: "readonly",
jQuery: "readonly",
moment: "readonly",
odoo: "readonly",
openerp: "readonly",
owl: "readonly",
luxon: "readonly",
QUnit: "readonly",
...globals.browser,
},
ecmaVersion: 2024,
sourceType: "script",
},
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",
"jsdoc/check-tag-names": "warn",
"jsdoc/check-types": "warn",
"jsdoc/require-param-description": "off",
"jsdoc/require-return": "off",
"jsdoc/require-return-description": "off",
"jsdoc/require-return-type": "off",
"valid-typeof": "warn",
yoda: "warn",
},
settings: {
jsdoc: {
tagNamePreference: {
arg: "param",
argument: "param",
augments: "extends",
constructor: "class",
exception: "throws",
func: "function",
method: "function",
prop: "property",
return: "returns",
virtual: "abstract",
yield: "yields",
},
preferredTypes: {
array: "Array",
bool: "Boolean",
boolean: "Boolean",
number: "Number",
object: "Object",
str: "String",
string: "String",
},
},
},
}, {
files: ["**/*.esm.js", "**/*test.js"],
languageOptions: {
ecmaVersion: 2024,
sourceType: "module",
},
}];
module.exports = config

View File

@@ -1,14 +0,0 @@
/** @type {import('prettier').Config} */
const config = {
// https://github.com/prettier/prettier/issues/15388#issuecomment-1717746872
plugins: [require.resolve("@prettier/plugin-xml")],
bracketSpacing: false,
printWidth: 88,
proseWrap: "always",
semi: true,
trailingComma: "es5",
xmlWhitespaceSensitivity: "preserve",
};
module.exports = config;