[
  {
    "path": ".copier-answers.yml",
    "content": "# Do NOT update manually; changes here will be overwritten by Copier\n_commit: 089da8d\n_src_path: https://github.com/it-projects-llc/oca-addons-repo-template\nci: GitHub\nconvert_readme_fragments_to_markdown: false\ngenerate_requirements_txt: true\ngithub_check_license: true\ngithub_ci_extra_env: {}\ngithub_enable_codecov: true\ngithub_enable_makepot: false\ngithub_enable_stale_action: false\ngithub_enforce_dev_status_compatibility: false\ninclude_wkhtmltopdf: false\nodoo_test_flavor: Both\nodoo_version: 14.0\norg_name: IT-Projects LLC\norg_slug: it-projects-llc\nrebel_module_groups: []\nrepo_description: ''\nrepo_name: ''\nrepo_slug: misc-addons\nrepo_website: https://github.com/it-projects-llc/misc-addons\nuse_pyproject_toml: false\nuse_ruff: false\n\n"
  },
  {
    "path": ".editorconfig",
    "content": "# Configuration for known file extensions\n[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]\ncharset = utf-8\nend_of_line = lf\nindent_size = 4\nindent_style = space\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n\n[*.{json,yml,yaml,rst,md}]\nindent_size = 2\n\n# Do not configure editor for libs and autogenerated content\n[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]\ncharset = unset\nend_of_line = unset\nindent_size = unset\nindent_style = unset\ninsert_final_newline = false\ntrim_trailing_whitespace = false\n"
  },
  {
    "path": ".eslintrc.yml",
    "content": "env:\n  browser: true\n  es6: true\n\n# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449\nparserOptions:\n  ecmaVersion: 2019\n\noverrides:\n  - files:\n      - \"**/*.esm.js\"\n    parserOptions:\n      sourceType: module\n\n# Globals available in Odoo that shouldn't produce errorings\nglobals:\n  _: readonly\n  $: readonly\n  fuzzy: readonly\n  jQuery: readonly\n  moment: readonly\n  odoo: readonly\n  openerp: readonly\n  owl: readonly\n  luxon: readonly\n\n# Styling is handled by Prettier, so we only need to enable AST rules;\n# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890\nrules:\n  accessor-pairs: warn\n  array-callback-return: warn\n  callback-return: warn\n  capitalized-comments:\n    - warn\n    - always\n    - ignoreConsecutiveComments: true\n      ignoreInlineComments: true\n  complexity:\n    - warn\n    - 15\n  constructor-super: warn\n  dot-notation: warn\n  eqeqeq: warn\n  global-require: warn\n  handle-callback-err: warn\n  id-blacklist: warn\n  id-match: warn\n  init-declarations: error\n  max-depth: warn\n  max-nested-callbacks: warn\n  max-statements-per-line: warn\n  no-alert: warn\n  no-array-constructor: warn\n  no-caller: warn\n  no-case-declarations: warn\n  no-class-assign: warn\n  no-cond-assign: error\n  no-const-assign: error\n  no-constant-condition: warn\n  no-control-regex: warn\n  no-debugger: error\n  no-delete-var: warn\n  no-div-regex: warn\n  no-dupe-args: error\n  no-dupe-class-members: error\n  no-dupe-keys: error\n  no-duplicate-case: error\n  no-duplicate-imports: error\n  no-else-return: warn\n  no-empty-character-class: warn\n  no-empty-function: error\n  no-empty-pattern: error\n  no-empty: warn\n  no-eq-null: error\n  no-eval: error\n  no-ex-assign: error\n  no-extend-native: warn\n  no-extra-bind: warn\n  no-extra-boolean-cast: warn\n  no-extra-label: warn\n  no-fallthrough: warn\n  no-func-assign: error\n  no-global-assign: error\n  no-implicit-coercion:\n    - warn\n    - allow: [\"~\"]\n  no-implicit-globals: warn\n  no-implied-eval: warn\n  no-inline-comments: warn\n  no-inner-declarations: warn\n  no-invalid-regexp: warn\n  no-irregular-whitespace: warn\n  no-iterator: warn\n  no-label-var: warn\n  no-labels: warn\n  no-lone-blocks: warn\n  no-lonely-if: error\n  no-mixed-requires: error\n  no-multi-str: warn\n  no-native-reassign: error\n  no-negated-condition: warn\n  no-negated-in-lhs: error\n  no-new-func: warn\n  no-new-object: warn\n  no-new-require: warn\n  no-new-symbol: warn\n  no-new-wrappers: warn\n  no-new: warn\n  no-obj-calls: warn\n  no-octal-escape: warn\n  no-octal: warn\n  no-param-reassign: warn\n  no-path-concat: warn\n  no-process-env: warn\n  no-process-exit: warn\n  no-proto: warn\n  no-prototype-builtins: warn\n  no-redeclare: warn\n  no-regex-spaces: warn\n  no-restricted-globals: warn\n  no-restricted-imports: warn\n  no-restricted-modules: warn\n  no-restricted-syntax: warn\n  no-return-assign: error\n  no-script-url: warn\n  no-self-assign: warn\n  no-self-compare: warn\n  no-sequences: warn\n  no-shadow-restricted-names: warn\n  no-shadow: warn\n  no-sparse-arrays: warn\n  no-sync: warn\n  no-this-before-super: warn\n  no-throw-literal: warn\n  no-undef-init: warn\n  no-undef: error\n  no-unmodified-loop-condition: warn\n  no-unneeded-ternary: error\n  no-unreachable: error\n  no-unsafe-finally: error\n  no-unused-expressions: error\n  no-unused-labels: error\n  no-unused-vars: warn\n  no-use-before-define: error\n  no-useless-call: warn\n  no-useless-computed-key: warn\n  no-useless-concat: warn\n  no-useless-constructor: warn\n  no-useless-escape: warn\n  no-useless-rename: warn\n  no-void: warn\n  no-with: warn\n  operator-assignment: [error, always]\n  prefer-const: warn\n  radix: warn\n  require-yield: warn\n  sort-imports: warn\n  spaced-comment: [error, always]\n  strict: [error, function]\n  use-isnan: error\n  valid-jsdoc:\n    - warn\n    - prefer:\n        arg: param\n        argument: param\n        augments: extends\n        constructor: class\n        exception: throws\n        func: function\n        method: function\n        prop: property\n        return: returns\n        virtual: abstract\n        yield: yields\n      preferType:\n        array: Array\n        bool: Boolean\n        boolean: Boolean\n        number: Number\n        object: Object\n        str: String\n        string: String\n      requireParamDescription: false\n      requireReturn: false\n      requireReturnDescription: false\n      requireReturnType: false\n  valid-typeof: warn\n  yoda: warn\n"
  },
  {
    "path": ".flake8",
    "content": "[flake8]\nmax-line-length = 88\nmax-complexity = 16\n# B = bugbear\n# B9 = bugbear opinionated (incl line length)\nselect = C,E,F,W,B,B9\n# E203: whitespace before ':' (black behaviour)\n# E501: flake8 line length (covered by bugbear B950)\n# W503: line break before binary operator (black behaviour)\nignore = E203,E501,W503\nper-file-ignores=\n    __init__.py:F401\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "custom: \"https://www.paypal.me/ITProPayment\"\n"
  },
  {
    "path": ".github/workflows/pre-commit.yml",
    "content": "name: pre-commit\n\non:\n  pull_request:\n    branches:\n      - \"14.0*\"\n  push:\n    branches:\n      - \"14.0\"\n      - \"14.0-ocabot-*\"\n\njobs:\n  pre-commit:\n    runs-on: ubuntu-22.04\n    steps:\n      - uses: actions/checkout@v3\n      - uses: actions/setup-python@v2\n        with:\n          python-version: \"3.11\"\n      - name: Get python version\n        run: echo \"PY=$(python -VV | sha256sum | cut -d' ' -f1)\" >> $GITHUB_ENV\n      - uses: actions/cache@v1\n        with:\n          path: ~/.cache/pre-commit\n          key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}\n      - name: Install pre-commit\n        run: pip install pre-commit\n      - name: Run pre-commit\n        run: pre-commit run --all-files --show-diff-on-failure --color=always\n        env:\n          # Consider valid a PR that changes README fragments but doesn't\n          # change the README.rst file itself. It's not really a problem\n          # because the bot will update it anyway after merge. This way, we\n          # lower the barrier for functional contributors that want to fix the\n          # readme fragments, while still letting developers get README\n          # auto-generated (which also helps functionals when using runboat).\n          # DOCS https://pre-commit.com/#temporarily-disabling-hooks\n          SKIP: oca-gen-addon-readme\n      - name: Check that all files generated by pre-commit are in git\n        run: |\n          newfiles=\"$(git ls-files --others --exclude-from=.gitignore)\"\n          if [ \"$newfiles\" != \"\" ] ; then\n              echo \"Please check-in the following files:\"\n              echo \"$newfiles\"\n              exit 1\n          fi\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: tests\n\non:\n  pull_request:\n    branches:\n      - \"14.0*\"\n  push:\n    branches:\n      - \"14.0\"\n      - \"14.0-ocabot-*\"\n\njobs:\n  unreleased-deps:\n    runs-on: ubuntu-latest\n    name: Detect unreleased dependencies\n    steps:\n      - uses: actions/checkout@v3\n      - run: |\n          for reqfile in requirements.txt test-requirements.txt ; do\n              if [ -f ${reqfile} ] ; then\n                  result=0\n                  # reject non-comment lines that contain a / (i.e. URLs, relative paths)\n                  grep \"^[^#].*/\" ${reqfile} || result=$?\n                  if [ $result -eq 0 ] ; then\n                      echo \"Unreleased dependencies found in ${reqfile}.\"\n                      exit 1\n                  fi\n              fi\n          done\n  test:\n    runs-on: ubuntu-22.04\n    container: ${{ matrix.container }}\n    name: ${{ matrix.name }}\n    strategy:\n      fail-fast: false\n      matrix:\n        include:\n          - container: ghcr.io/oca/oca-ci/py3.6-odoo14.0:latest\n            name: test with Odoo\n          - container: ghcr.io/oca/oca-ci/py3.6-ocb14.0:latest\n            name: test with OCB\n            makepot: \"false\"\n    services:\n      postgres:\n        image: postgres:9.6\n        env:\n          POSTGRES_USER: odoo\n          POSTGRES_PASSWORD: odoo\n          POSTGRES_DB: odoo\n        ports:\n          - 5432:5432\n    steps:\n      - uses: actions/checkout@v3\n        with:\n          persist-credentials: false\n      - name: Install addons and dependencies\n        run: oca_install_addons\n      - name: Check licenses\n        run: manifestoo -d . check-licenses\n      - name: Check development status\n        run: manifestoo -d . check-dev-status --default-dev-status=Beta\n        continue-on-error: true\n      - name: Initialize test db\n        run: oca_init_test_database\n      - name: Run tests\n        run: oca_run_tests\n      - uses: codecov/codecov-action@v4\n        with:\n          token: ${{ secrets.CODECOV_TOKEN }}\n      - name: Update .pot files\n        run: oca_export_and_push_pot https://x-access-token:${{ secrets.GIT_PUSH_TOKEN }}@github.com/${{ github.repository }}\n        if: ${{ matrix.makepot == 'true' && github.event_name == 'push' && github.repository_owner == 'it-projects-llc' }}\n"
  },
  {
    "path": ".gitignore",
    "content": "# Byte-compiled / optimized / DLL files\n__pycache__/\n*.py[cod]\n/.venv\n/.pytest_cache\n/.ruff_cache\n\n# C extensions\n*.so\n\n# Distribution / packaging\n.Python\nenv/\nbin/\nbuild/\ndevelop-eggs/\ndist/\neggs/\nlib64/\nparts/\nsdist/\nvar/\n*.egg-info/\n.installed.cfg\n*.egg\n*.eggs\n\n# Windows installers\n*.msi\n\n# Debian packages\n*.deb\n\n# Redhat packages\n*.rpm\n\n# MacOS packages\n*.dmg\n*.pkg\n\n# Installer logs\npip-log.txt\npip-delete-this-directory.txt\n\n# Unit test / coverage reports\nhtmlcov/\n.tox/\n.coverage\n.cache\nnosetests.xml\ncoverage.xml\n\n# Translations\n*.mo\n\n# Pycharm\n.idea\n\n# Eclipse\n.settings\n\n# Visual Studio cache/options directory\n.vs/\n.vscode\n\n# OSX Files\n.DS_Store\n\n# Django stuff:\n*.log\n\n# Mr Developer\n.mr.developer.cfg\n.project\n.pydevproject\n\n# Rope\n.ropeproject\n\n# Sphinx documentation\ndocs/_build/\n\n# Backup files\n*~\n*.swp\n\n# OCA rules\n!static/lib/\n"
  },
  {
    "path": ".isort.cfg",
    "content": "[settings]\n; see https://github.com/psf/black\nmulti_line_output=3\ninclude_trailing_comma=True\nforce_grid_wrap=0\ncombine_as_imports=True\nuse_parentheses=True\nline_length=88\nknown_odoo=odoo\nknown_odoo_addons=odoo.addons\nsections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER\ndefault_section=THIRDPARTY\nensure_newline_before_comments = True\n"
  },
  {
    "path": ".oca_hooks.cfg",
    "content": "[MESSAGES_CONTROL]\ndisable=xml-deprecated-data-node,xml-deprecated-tree-attribute\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "exclude: |\n  (?x)\n  # NOT INSTALLABLE ADDONS\n  # END NOT INSTALLABLE ADDONS\n  # Files and folders generated by bots, to avoid loops\n  ^setup/|/static/description/index\\.html$|\n  # We don't want to mess with tool-generated files\n  .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|\n  # Maybe reactivate this when all README files include prettier ignore tags?\n  ^README\\.md$|\n  # Library files can have extraneous formatting (even minimized)\n  /static/(src/)?lib/|\n  # Repos using Sphinx to generate docs don't need prettying\n  ^docs/_templates/.*\\.html$|\n  # Don't bother non-technical authors with formatting issues in docs\n  readme/.*\\.(rst|md)$|\n  # Ignore build and dist directories in addons\n  /build/|/dist/|\n  # Ignore test files in addons\n  /tests/samples/.*|\n  # You don't usually want a bot to modify your legal texts\n  (LICENSE.*|COPYING.*)\ndefault_language_version:\n  python: python3\n  node: \"14.13.0\"\nrepos:\n  - repo: local\n    hooks:\n      # These files are most likely copier diff rejection junks; if found,\n      # review them manually, fix the problem (if needed) and remove them\n      - id: forbidden-files\n        name: forbidden files\n        entry: found forbidden files; remove them\n        language: fail\n        files: \"\\\\.rej$\"\n      - id: en-po-files\n        name: en.po files cannot exist\n        entry: found a en.po file\n        language: fail\n        files: '[a-zA-Z0-9_]*/i18n/en\\.po$'\n  - repo: https://github.com/oca/maintainer-tools\n    rev: d5fab7ee87fceee858a3d01048c78a548974d935\n    hooks:\n      # update the NOT INSTALLABLE ADDONS section above\n      - id: oca-update-pre-commit-excluded-addons\n      - id: oca-fix-manifest-website\n        args: [\"https://github.com/it-projects-llc/misc-addons\"]\n      - id: oca-gen-addon-readme\n        args:\n          - --addons-dir=.\n          - --branch=14.0\n          - --org-name=it-projects-llc\n          - --repo-name=misc-addons\n          - --if-source-changed\n          - --keep-source-digest\n  - repo: https://github.com/OCA/odoo-pre-commit-hooks\n    rev: v0.0.25\n    hooks:\n      - id: oca-checks-odoo-module\n      - id: oca-checks-po\n  - repo: https://github.com/myint/autoflake\n    rev: v1.4\n    hooks:\n      - id: autoflake\n        args:\n          - --expand-star-imports\n          - --ignore-init-module-imports\n          - --in-place\n          - --remove-all-unused-imports\n          - --remove-duplicate-keys\n          - --remove-unused-variables\n  - repo: https://github.com/psf/black\n    rev: 22.3.0\n    hooks:\n      - id: black\n  - repo: https://github.com/pre-commit/mirrors-prettier\n    rev: v2.1.2\n    hooks:\n      - id: prettier\n        name: prettier (with plugin-xml)\n        additional_dependencies:\n          - \"prettier@2.1.2\"\n          - \"@prettier/plugin-xml@0.12.0\"\n        args:\n          - --plugin=@prettier/plugin-xml\n        files: \\.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$\n  - repo: https://github.com/pre-commit/mirrors-eslint\n    rev: v7.8.1\n    hooks:\n      - id: eslint\n        verbose: true\n        args:\n          - --color\n          - --fix\n  - repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v3.2.0\n    hooks:\n      - id: trailing-whitespace\n        # exclude autogenerated files\n        exclude: /README\\.rst$|\\.pot?$\n      - id: end-of-file-fixer\n        # exclude autogenerated files\n        exclude: /README\\.rst$|\\.pot?$\n      - id: debug-statements\n      - id: fix-encoding-pragma\n        args: [\"--remove\"]\n      - id: check-case-conflict\n      - id: check-docstring-first\n      - id: check-executables-have-shebangs\n      - id: check-merge-conflict\n        # exclude files where underlines are not distinguishable from merge conflicts\n        exclude: /README\\.rst$|^docs/.*\\.rst$\n      - id: check-symlinks\n      - id: check-xml\n      - id: mixed-line-ending\n        args: [\"--fix=lf\"]\n  - repo: https://github.com/asottile/pyupgrade\n    rev: v2.7.2\n    hooks:\n      - id: pyupgrade\n        args: [\"--keep-percent-format\"]\n  - repo: https://github.com/PyCQA/isort\n    rev: 5.12.0\n    hooks:\n      - id: isort\n        name: isort except __init__.py\n        args:\n          - --settings=.\n        exclude: /__init__\\.py$\n  - repo: https://github.com/acsone/setuptools-odoo\n    rev: 3.1.8\n    hooks:\n      - id: setuptools-odoo-make-default\n      - id: setuptools-odoo-get-requirements\n        args:\n          - --output\n          - requirements.txt\n          - --header\n          - \"# generated from manifests external_dependencies\"\n  - repo: https://github.com/PyCQA/flake8\n    rev: 3.8.3\n    hooks:\n      - id: flake8\n        name: flake8\n        additional_dependencies: [\"flake8-bugbear==20.1.4\"]\n  - repo: https://github.com/OCA/pylint-odoo\n    rev: 7.0.2\n    hooks:\n      - id: pylint_odoo\n        name: pylint with optional checks\n        args:\n          - --rcfile=.pylintrc\n          - --exit-zero\n        verbose: true\n      - id: pylint_odoo\n        args:\n          - --rcfile=.pylintrc-mandatory\n"
  },
  {
    "path": ".prettierrc.yml",
    "content": "# Defaults for all prettier-supported languages.\n# Prettier will complete this with settings from .editorconfig file.\nbracketSpacing: false\nprintWidth: 88\nproseWrap: always\nsemi: true\ntrailingComma: \"es5\"\nxmlWhitespaceSensitivity: \"strict\"\n"
  },
  {
    "path": ".pylintrc",
    "content": "\n\n[MASTER]\nload-plugins=pylint_odoo\nscore=n\n\n[ODOOLINT]\nreadme_template_url=\"https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst\"\nmanifest_required_authors=IT-Projects LLC\nmanifest_required_keys=license\nmanifest_deprecated_keys=description,active\nlicense_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3\nvalid_odoo_versions=14.0\n\n[MESSAGES CONTROL]\ndisable=all\n\n# This .pylintrc contains optional AND mandatory checks and is meant to be\n# loaded in an IDE to have it check everything, in the hope this will make\n# optional checks more visible to contributors who otherwise never look at a\n# green travis to see optional checks that failed.\n# .pylintrc-mandatory containing only mandatory checks is used the pre-commit\n# config as a blocking check.\n\nenable=anomalous-backslash-in-string,\n    api-one-deprecated,\n    api-one-multi-together,\n    assignment-from-none,\n    attribute-deprecated,\n    class-camelcase,\n    dangerous-default-value,\n    dangerous-view-replace-wo-priority,\n    development-status-allowed,\n    duplicate-id-csv,\n    duplicate-key,\n    duplicate-xml-fields,\n    duplicate-xml-record-id,\n    eval-referenced,\n    eval-used,\n    incoherent-interpreter-exec-perm,\n    license-allowed,\n    manifest-author-string,\n    manifest-deprecated-key,\n    manifest-required-author,\n    manifest-required-key,\n    manifest-version-format,\n    method-compute,\n    method-inverse,\n    method-required-super,\n    method-search,\n    openerp-exception-warning,\n    pointless-statement,\n    pointless-string-statement,\n    print-used,\n    redundant-keyword-arg,\n    redundant-modulename-xml,\n    reimported,\n    relative-import,\n    return-in-init,\n    rst-syntax-error,\n    sql-injection,\n    too-few-format-args,\n    translation-field,\n    translation-required,\n    unreachable,\n    use-vim-comment,\n    wrong-tabs-instead-of-spaces,\n    xml-syntax-error,\n    # messages that do not cause the lint step to fail\n    consider-merging-classes-inherited,\n    create-user-wo-reset-password,\n    dangerous-filter-wo-user,\n    deprecated-module,\n    file-not-used,\n    invalid-commit,\n    missing-manifest-dependency,\n    missing-newline-extrafiles,\n    missing-readme,\n    no-utf8-coding-comment,\n    odoo-addons-relative-import,\n    old-api7-method-defined,\n    redefined-builtin,\n    too-complex,\n    unnecessary-utf8-coding-comment\n\n\n[REPORTS]\nmsg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\noutput-format=colorized\nreports=no\n"
  },
  {
    "path": ".pylintrc-mandatory",
    "content": "\n[MASTER]\nload-plugins=pylint_odoo\nscore=n\n\n[ODOOLINT]\nreadme_template_url=\"https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst\"\nmanifest_required_authors=IT-Projects LLC\nmanifest_required_keys=license\nmanifest_deprecated_keys=description,active\nlicense_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3\nvalid_odoo_versions=14.0\n\n[MESSAGES CONTROL]\ndisable=all\n\nenable=anomalous-backslash-in-string,\n    api-one-deprecated,\n    api-one-multi-together,\n    assignment-from-none,\n    attribute-deprecated,\n    class-camelcase,\n    dangerous-default-value,\n    dangerous-view-replace-wo-priority,\n    development-status-allowed,\n    duplicate-id-csv,\n    duplicate-key,\n    duplicate-xml-fields,\n    duplicate-xml-record-id,\n    eval-referenced,\n    eval-used,\n    incoherent-interpreter-exec-perm,\n    license-allowed,\n    manifest-author-string,\n    manifest-deprecated-key,\n    manifest-required-author,\n    manifest-required-key,\n    manifest-version-format,\n    method-compute,\n    method-inverse,\n    method-required-super,\n    method-search,\n    openerp-exception-warning,\n    pointless-statement,\n    pointless-string-statement,\n    print-used,\n    redundant-keyword-arg,\n    redundant-modulename-xml,\n    reimported,\n    relative-import,\n    return-in-init,\n    rst-syntax-error,\n    sql-injection,\n    too-few-format-args,\n    translation-field,\n    translation-required,\n    unreachable,\n    use-vim-comment,\n    wrong-tabs-instead-of-spaces,\n    xml-syntax-error\n\n[REPORTS]\nmsg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}\noutput-format=colorized\nreports=no\n"
  },
  {
    "path": "LICENSE",
    "content": "                   GNU LESSER GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n\n  This version of the GNU Lesser General Public License incorporates\nthe terms and conditions of version 3 of the GNU General Public\nLicense, supplemented by the additional permissions listed below.\n\n  0. Additional Definitions.\n\n  As used herein, \"this License\" refers to version 3 of the GNU Lesser\nGeneral Public License, and the \"GNU GPL\" refers to version 3 of the GNU\nGeneral Public License.\n\n  \"The Library\" refers to a covered work governed by this License,\nother than an Application or a Combined Work as defined below.\n\n  An \"Application\" is any work that makes use of an interface provided\nby the Library, but which is not otherwise based on the Library.\nDefining a subclass of a class defined by the Library is deemed a mode\nof using an interface provided by the Library.\n\n  A \"Combined Work\" is a work produced by combining or linking an\nApplication with the Library.  The particular version of the Library\nwith which the Combined Work was made is also called the \"Linked\nVersion\".\n\n  The \"Minimal Corresponding Source\" for a Combined Work means the\nCorresponding Source for the Combined Work, excluding any source code\nfor portions of the Combined Work that, considered in isolation, are\nbased on the Application, and not on the Linked Version.\n\n  The \"Corresponding Application Code\" for a Combined Work means the\nobject code and/or source code for the Application, including any data\nand utility programs needed for reproducing the Combined Work from the\nApplication, but excluding the System Libraries of the Combined Work.\n\n  1. Exception to Section 3 of the GNU GPL.\n\n  You may convey a covered work under sections 3 and 4 of this License\nwithout being bound by section 3 of the GNU GPL.\n\n  2. Conveying Modified Versions.\n\n  If you modify a copy of the Library, and, in your modifications, a\nfacility refers to a function or data to be supplied by an Application\nthat uses the facility (other than as an argument passed when the\nfacility is invoked), then you may convey a copy of the modified\nversion:\n\n   a) under this License, provided that you make a good faith effort to\n   ensure that, in the event an Application does not supply the\n   function or data, the facility still operates, and performs\n   whatever part of its purpose remains meaningful, or\n\n   b) under the GNU GPL, with none of the additional permissions of\n   this License applicable to that copy.\n\n  3. Object Code Incorporating Material from Library Header Files.\n\n  The object code form of an Application may incorporate material from\na header file that is part of the Library.  You may convey such object\ncode under terms of your choice, provided that, if the incorporated\nmaterial is not limited to numerical parameters, data structure\nlayouts and accessors, or small macros, inline functions and templates\n(ten or fewer lines in length), you do both of the following:\n\n   a) Give prominent notice with each copy of the object code that the\n   Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the object code with a copy of the GNU GPL and this license\n   document.\n\n  4. Combined Works.\n\n  You may convey a Combined Work under terms of your choice that,\ntaken together, effectively do not restrict modification of the\nportions of the Library contained in the Combined Work and reverse\nengineering for debugging such modifications, if you also do each of\nthe following:\n\n   a) Give prominent notice with each copy of the Combined Work that\n   the Library is used in it and that the Library and its use are\n   covered by this License.\n\n   b) Accompany the Combined Work with a copy of the GNU GPL and this license\n   document.\n\n   c) For a Combined Work that displays copyright notices during\n   execution, include the copyright notice for the Library among\n   these notices, as well as a reference directing the user to the\n   copies of the GNU GPL and this license document.\n\n   d) Do one of the following:\n\n       0) Convey the Minimal Corresponding Source under the terms of this\n       License, and the Corresponding Application Code in a form\n       suitable for, and under terms that permit, the user to\n       recombine or relink the Application with a modified version of\n       the Linked Version to produce a modified Combined Work, in the\n       manner specified by section 6 of the GNU GPL for conveying\n       Corresponding Source.\n\n       1) Use a suitable shared library mechanism for linking with the\n       Library.  A suitable mechanism is one that (a) uses at run time\n       a copy of the Library already present on the user's computer\n       system, and (b) will operate properly with a modified version\n       of the Library that is interface-compatible with the Linked\n       Version.\n\n   e) Provide Installation Information, but only if you would otherwise\n   be required to provide such information under section 6 of the\n   GNU GPL, and only to the extent that such information is\n   necessary to install and execute a modified version of the\n   Combined Work produced by recombining or relinking the\n   Application with a modified version of the Linked Version. (If\n   you use option 4d0, the Installation Information must accompany\n   the Minimal Corresponding Source and Corresponding Application\n   Code. If you use option 4d1, you must provide the Installation\n   Information in the manner specified by section 6 of the GNU GPL\n   for conveying Corresponding Source.)\n\n  5. Combined Libraries.\n\n  You may place library facilities that are a work based on the\nLibrary side by side in a single library together with other library\nfacilities that are not Applications and are not covered by this\nLicense, and convey such a combined library under terms of your\nchoice, if you do both of the following:\n\n   a) Accompany the combined library with a copy of the same work based\n   on the Library, uncombined with any other library facilities,\n   conveyed under the terms of this License.\n\n   b) Give prominent notice with the combined library that part of it\n   is a work based on the Library, and explaining where to find the\n   accompanying uncombined form of the same work.\n\n  6. Revised Versions of the GNU Lesser General Public License.\n\n  The Free Software Foundation may publish revised and/or new versions\nof the GNU Lesser General Public License from time to time. Such new\nversions will be similar in spirit to the present version, but may\ndiffer in detail to address new problems or concerns.\n\n  Each version is given a distinguishing version number. If the\nLibrary as you received it specifies that a certain numbered version\nof the GNU Lesser General Public License \"or any later version\"\napplies to it, you have the option of following the terms and\nconditions either of that published version or of any later version\npublished by the Free Software Foundation. If the Library as you\nreceived it does not specify a version number of the GNU Lesser\nGeneral Public License, you may choose any version of the GNU Lesser\nGeneral Public License ever published by the Free Software Foundation.\n\n  If the Library as you received it specifies that a proxy can decide\nwhether future versions of the GNU Lesser General Public License shall\napply, that proxy's public statement of acceptance of any version is\npermanent authorization for you to choose that version for the\nLibrary.\n"
  },
  {
    "path": "README.md",
    "content": "\n<!-- /!\\ Non OCA Context : Set here the badge of your runbot / runboat instance. -->\n[![Pre-commit Status](https://github.com/it-projects-llc/misc-addons/actions/workflows/pre-commit.yml/badge.svg?branch=14.0)](https://github.com/it-projects-llc/misc-addons/actions/workflows/pre-commit.yml?query=branch%3A14.0)\n[![Build Status](https://github.com/it-projects-llc/misc-addons/actions/workflows/test.yml/badge.svg?branch=14.0)](https://github.com/it-projects-llc/misc-addons/actions/workflows/test.yml?query=branch%3A14.0)\n[![codecov](https://codecov.io/gh/it-projects-llc/misc-addons/branch/14.0/graph/badge.svg)](https://codecov.io/gh/it-projects-llc/misc-addons)\n<!-- /!\\ Non OCA Context : Set here the badge of your translation instance. -->\n\n<!-- /!\\ do not modify above this line -->\n\n#\n\n\n\n<!-- /!\\ do not modify below this line -->\n\n<!-- prettier-ignore-start -->\n\n[//]: # (addons)\n\nThis part will be replaced when running the oca-gen-addons-table script from OCA/maintainer-tools.\n\n[//]: # (end addons)\n\n<!-- prettier-ignore-end -->\n\n## Licenses\n\nThis repository is licensed under [LGPL-3.0](LICENSE).\n\nHowever, each module can have a totally different license, as long as they adhere to IT-Projects LLC\npolicy. Consult each module's `__manifest__.py` file, which contains a `license` key\nthat explains its license.\n\n----\n<!-- /!\\ Non OCA Context : Set here the full description of your organization. -->\n"
  },
  {
    "path": "project_task_subtask/README.rst",
    "content": "======================\nProject Task Checklist\n======================\n\n.. \n   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n   !! This file is generated by oca-gen-addon-readme !!\n   !! changes will be overwritten.                   !!\n   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n   !! source digest: sha256:3a3f0575b71186dece7826cf32d1bfc8cbfa7c3076d64352bcca8a09c4fd41a9\n   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png\n    :target: https://odoo-community.org/page/development-status\n    :alt: Beta\n.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png\n    :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html\n    :alt: License: LGPL-3\n.. |badge3| image:: https://img.shields.io/badge/github-it--projects--llc%2Fmisc--addons-lightgray.png?logo=github\n    :target: https://github.com/it-projects-llc/misc-addons/tree/14.0/project_task_subtask\n    :alt: it-projects-llc/misc-addons\n\n|badge1| |badge2| |badge3|\n\nUse subtasks to control your tasks. Be ensure that all your\ntasks/subtasks are performed and not missed.\n\nFeatures:\n\n-  Added new \"Checklist\" tab on task's form\n\n-  When new subtask is created\\\\changed, message is sent to user that\n   assigned to this subtask\n\n-  Only users related to subtask can change subtask parameters\n\n-  All subtasks have a certain color, informing about their state\n\n-  Each subtask has buttons to switch state:\n\n-  DONE\n\n-  TODO\n\n-  CANCELLED\n\n-  Added new \"Checklist\" menu\n\n-  default filter: \"My\", \"TODO\"\n\n-  optional group by: \"Project\", \"Task\", \"User\", \"State\"\n\n**Table of contents**\n\n.. contents::\n   :local:\n\nUsage\n=====\n\n-  Create User1 and User2 in the ``Settings >> Users`` menu\n\n-  Login as User1\n\n   -  Go to ``Project >> Project >> All Tasks`` and open the\n      ``Checklist`` tab\n   -  Create new subtask (Assigned to - User2)\n\n-  Login as User2\n\n   -  See message in Inbox like \"TODO: subtask_name\"\n   -  Change state of subtask to Cancelled/Done\n   -  You can see a message in Inbox \"Cancelled: subtask_name\" or \"Done:\n      subtask_name\" accordingly.\n\n-  You can see your TODOs on tasks in kanban view in the\n   ``Project >> Project >> Tasks`` menu\n\n-  The ``Project >> Project >> Checklist`` menu displays ALL subtasks in\n   state TODO assigned to you and subtasks where you are Reviewer\n\nBug Tracker\n===========\n\nBugs are tracked on `GitHub Issues <https://github.com/it-projects-llc/misc-addons/issues>`_.\nIn case of trouble, please check there if your issue has already been reported.\nIf you spotted it first, help us to smash it by providing a detailed and welcomed\n`feedback <https://github.com/it-projects-llc/misc-addons/issues/new?body=module:%20project_task_subtask%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.\n\nDo not contact contributors directly about support or help with technical issues.\n\nCredits\n=======\n\nAuthors\n-------\n\n* IT-Projects LLC\n\nContributors\n------------\n\n-  Ivan Yelizariev (https://github.com/yelizariev)\n-  Rafael Manaev (https://github.com/manawi)\n-  Ilmir Karamov (https://github.com/ilmir-k)\n-  Ildar Nasyrov (https://github.com/iledarn)\n-  Nicolas Jeudy (https://github.com/njeudy)\n-  Alexandr Kolushov (https://github.com/KolushovAlexandr)\n-  Almas Giniatullin (https://github.com/almas50)\n-  Denis Mudarisov (https://github.com/trojikman)\n-  Vildan Safin (https://github.com/Enigma228322)\n-  Eugene Molotov (https://github.com/em230418)\n-  Victor Bykov (https://github.com/BykovVik)\n\nMaintainers\n-----------\n\nThis module is part of the `it-projects-llc/misc-addons <https://github.com/it-projects-llc/misc-addons/tree/14.0/project_task_subtask>`_ project on GitHub.\n\nYou are welcome to contribute.\n"
  },
  {
    "path": "project_task_subtask/__init__.py",
    "content": "# License MIT (https://opensource.org/licenses/MIT).\n\nfrom . import models\n"
  },
  {
    "path": "project_task_subtask/__manifest__.py",
    "content": "{\n    \"name\": \"\"\"Project Task Checklist\"\"\",\n    \"summary\": \"\"\"Use checklist to be ensure that all your tasks are performed and to make easy control over them\"\"\",  # noqa: B950\n    \"category\": \"\"\"Project Management\"\"\",\n    \"images\": [\"images/checklist_main.png\"],\n    \"version\": \"14.0.1.1.2\",\n    \"author\": \"IT-Projects LLC\",\n    \"support\": \"it@it-projects.info\",\n    \"website\": \"https://github.com/it-projects-llc/misc-addons\",\n    \"license\": \"LGPL-3\",\n    \"depends\": [\"project\"],\n    \"data\": [\n        \"security/ir.model.access.csv\",\n        \"views/project_task_subtask.xml\",\n        \"views/assets.xml\",\n        \"data/subscription_template.xml\",\n    ],\n    \"qweb\": [\"static/src/xml/templates.xml\"],\n    \"demo\": [\"demo/project_task_subtask_demo.xml\"],\n}\n"
  },
  {
    "path": "project_task_subtask/data/subscription_template.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<odoo>\n    <record id=\"subtasks_subtype\" model=\"mail.message.subtype\">\n        <field name=\"name\">All checklist updates</field>\n        <field name=\"res_model\">project.task</field>\n        <field name=\"description\">\n            Subscribe to checklist updates of other users. By default you are notified\n            on checklist items to and from you only.\n        </field>\n        <field name=\"default\" eval=\"False\" />\n    </record>\n    <record id=\"all_subtask_subtype\" model=\"mail.message.subtype\">\n        <field name=\"name\">All checklist updates</field>\n        <field name=\"description\">\n            Subscribe to checklist updates of other users. By default you are notified\n            on checklist items to and from you only.\n        </field>\n        <field name=\"sequence\">10</field>\n        <field name=\"res_model\">project.project</field>\n        <field name=\"parent_id\" eval=\"ref('subtasks_subtype')\" />\n        <field name=\"relation_field\">project_id</field>\n        <field name=\"default\" eval=\"True\" />\n    </record>\n</odoo>\n"
  },
  {
    "path": "project_task_subtask/demo/project_task_subtask_demo.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<odoo noupdate=\"1\">\n    <record id=\"project_task_subtask_1\" model=\"project.task.subtask\">\n        <field name=\"name\">test subtask</field>\n        <field name=\"user_id\" eval=\"ref('base.user_demo')\" />\n        <field name=\"task_id\" eval=\"ref('project.project_task_1')\" />\n    </record>\n</odoo>\n"
  },
  {
    "path": "project_task_subtask/i18n/es_CR.po",
    "content": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * project_task_subtask\n# \n# Translators:\n# Randall <randall_castro@me.com>, 2018\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Odoo Server 11.0\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2018-04-30 21:57+0000\\n\"\n\"PO-Revision-Date: 2018-04-30 21:57+0000\\n\"\n\"Last-Translator: Randall <randall_castro@me.com>, 2018\\n\"\n\"Language-Team: Spanish (Costa Rica) (https://www.transifex.com/it-projects-llc/teams/76080/es_CR/)\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: \\n\"\n\"Language: es_CR\\n\"\n\"Plural-Forms: nplurals=2; plural=(n != 1);\\n\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,name:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,name:project_task_subtask.subtasks_subtype\nmsgid \"All checklist updates\"\nmsgstr \"Todas las actualizaciones de la lista de verificación\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_user_id\nmsgid \"Assigned to\"\nmsgstr \"Asignado a\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Cancelled\"\nmsgstr \"Cancelado\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to CANCELLED\"\nmsgstr \"Cambiar estado a CANCELADO\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to DONE\"\nmsgstr \"Cambiar estado a TERMINADO\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to TODO\"\nmsgstr \"Cambiar estado a POR HACER\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to WAITING\"\nmsgstr \"Cambiar estado a ESPERANDO\"\n\n#. module: project_task_subtask\n#: model:ir.actions.act_window,name:project_task_subtask.action_view_subtask\n#: model:ir.ui.menu,name:project_task_subtask.menu_action_view_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Checklist\"\nmsgstr \"Lista de Verificación\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_uid\nmsgid \"Created by\"\nmsgstr \"Creado por\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_date\nmsgid \"Created on\"\nmsgstr \"Creado en\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_deadline\nmsgid \"Deadline\"\nmsgstr \"Tiempo Entrega\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_default_user\nmsgid \"Default User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_name\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Description\"\nmsgstr \"Descripción\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_display_name\nmsgid \"Display Name\"\nmsgstr \"Mostrar Nombre\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Done\"\nmsgstr \"Terminado\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Filter\"\nmsgstr \"Filtro\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Group By\"\nmsgstr \"Agrupar por\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_hide_button\nmsgid \"Hide Button\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_id\nmsgid \"ID\"\nmsgstr \"ID\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_kanban_subtasks\nmsgid \"Kanban Subtasks\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask___last_update\nmsgid \"Last Modified on\"\nmsgstr \"Última Modificación el\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_uid\nmsgid \"Last Updated by\"\nmsgstr \"Última Modificación por\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_date\nmsgid \"Last Updated on\"\nmsgstr \"Última Actualización en\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"My\"\nmsgstr \"Mi\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:60\n#: code:addons/project_task_subtask/models/project_task_subtask.py:64\n#, python-format\nmsgid \"Only users related to that subtask can change state.\"\nmsgstr \"\"\n\"Sólo los usuarios relacionados a la sub tarea pueden cambiarla de estado\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_project_id_2779\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Project\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_recolor\nmsgid \"Recolor\"\nmsgstr \"Cambiar Color\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_reviewer_id\nmsgid \"Reviewer\"\nmsgstr \"Revisado Por\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"State\"\nmsgstr \"Estado\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_state\nmsgid \"Status\"\nmsgstr \"Estatus\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,description:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,description:project_task_subtask.subtasks_subtype\nmsgid \"\"\n\"Subscribe to checklist updates of other users. By default you are notified \"\n\"on checklist items to and from you only.\"\nmsgstr \"\"\n\"Suscríbete a las actualizaciones de la lista de verificación de otros \"\n\"usuarios. De forma predeterminada, se le notifica solo en los elementos de \"\n\"la lista de verificación.\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_ids\nmsgid \"Subtask\"\nmsgstr \"Sub tarea\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_id\nmsgid \"Subtask Message\"\nmsgstr \"Mensaje Sub tarea\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\n#: selection:project.task.subtask,state:0\nmsgid \"TODO\"\nmsgstr \"Por Hacer\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Task\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_state\nmsgid \"Task state\"\nmsgstr \"Estado tarea\"\n\n#. module: project_task_subtask\n#: model:project.task.subtask,task_state:project_task_subtask.project_task_subtask_1\nmsgid \"To Do\"\nmsgstr \"Por Hacer\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"User\"\nmsgstr \"Usuario\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Waiting\"\nmsgstr \"Esperando\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task_subtask\nmsgid \"project.task.subtask\"\nmsgstr \"project.task.subtask\"\n"
  },
  {
    "path": "project_task_subtask/i18n/fr.po",
    "content": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * project_task_subtask\n# \n# Translators:\n# Translation Bot <i18n-bot@it-projects.info>, 2018\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Odoo Server 10.0\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2018-04-20 23:52+0000\\n\"\n\"PO-Revision-Date: 2018-04-20 23:52+0000\\n\"\n\"Last-Translator: Translation Bot <i18n-bot@it-projects.info>, 2018\\n\"\n\"Language-Team: French (https://www.transifex.com/it-projects-llc/teams/76080/fr/)\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: \\n\"\n\"Language: fr\\n\"\n\"Plural-Forms: nplurals=2; plural=(n > 1);\\n\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,name:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,name:project_task_subtask.subtasks_subtype\nmsgid \"All checklist updates\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_user_id\nmsgid \"Assigned to\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Cancelled\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to CANCELLED\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to DONE\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to WAITING\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.actions.act_window,name:project_task_subtask.action_view_subtask\n#: model:ir.ui.menu,name:project_task_subtask.menu_action_view_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Checklist\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_uid\nmsgid \"Created by\"\nmsgstr \"Créé par\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_date\nmsgid \"Created on\"\nmsgstr \"Créé le\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_deadline\nmsgid \"Deadline\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_default_user\nmsgid \"Default user\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_name\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Description\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_display_name\nmsgid \"Display Name\"\nmsgstr \"Nom affiché\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Done\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Filter\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Group By\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_hide_button\nmsgid \"Hide button\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_id\nmsgid \"ID\"\nmsgstr \"ID\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_kanban_subtasks\nmsgid \"Kanban subtasks\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask___last_update\nmsgid \"Last Modified on\"\nmsgstr \"Dernière Modification le\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_uid\nmsgid \"Last Updated by\"\nmsgstr \"Dernière mise à jour par\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_date\nmsgid \"Last Updated on\"\nmsgstr \"Dernière mise à jour le\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"My\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:61\n#: code:addons/project_task_subtask/models/project_task_subtask.py:65\n#, python-format\nmsgid \"Only users related to that subtask can change state.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_project_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Project\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_recolor\nmsgid \"Recolor\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_reviewer_id\nmsgid \"Reviewer\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"State\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_state\nmsgid \"Status\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,description:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,description:project_task_subtask.subtasks_subtype\nmsgid \"\"\n\"Subscribe to checklist updates of other users. By default you are notified \"\n\"on checklist items to and from you only.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_ids\nmsgid \"Subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_id\nmsgid \"Subtask Message\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\n#: selection:project.task.subtask,state:0\nmsgid \"TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Task\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Task Work\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_state\nmsgid \"Task state\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:project.task.subtask,task_state:project_task_subtask.project_task_subtask_1\nmsgid \"To Do\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Waiting\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task_subtask\nmsgid \"project.task.subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.subtask_list_view\nmsgid \"subtask_list_form\"\nmsgstr \"\"\n"
  },
  {
    "path": "project_task_subtask/i18n/project_task_subtask.pot",
    "content": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n#\t* project_task_subtask\n#\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Odoo Server 11.0\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"Last-Translator: <>\\n\"\n\"Language-Team: \\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: \\n\"\n\"Plural-Forms: \\n\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,name:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,name:project_task_subtask.subtasks_subtype\nmsgid \"All checklist updates\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_user_id\nmsgid \"Assigned to\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Cancelled\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to CANCELLED\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to DONE\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to Waiting\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.actions.act_window,name:project_task_subtask.action_view_subtask\n#: model:ir.ui.menu,name:project_task_subtask.menu_action_view_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Checklist\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_completion\nmsgid \"Completion\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_completion_xml\nmsgid \"Completion Xml\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_uid\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_reviewer_id\nmsgid \"Created by\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_date\nmsgid \"Created on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_deadline\nmsgid \"Deadline\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_default_user\nmsgid \"Default User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_name\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Description\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_display_name\nmsgid \"Display Name\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Done\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Filter\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Group By\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_hide_button\nmsgid \"Hide Button\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_id\nmsgid \"ID\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_kanban_subtasks\nmsgid \"Kanban Subtasks\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask___last_update\nmsgid \"Last Modified on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_uid\nmsgid \"Last Updated by\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_date\nmsgid \"Last Updated on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"My\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:67\n#: code:addons/project_task_subtask/models/project_task_subtask.py:71\n#, python-format\nmsgid \"Only users related to that subtask can change state.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_project_id_4692\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Project\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_recolor\nmsgid \"Recolor\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#. openerp-web\n#: code:addons/project_task_subtask/static/src/xml/templates.xml:6\n#, python-format\nmsgid \"Sort\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"State\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_state\nmsgid \"Status\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,description:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,description:project_task_subtask.subtasks_subtype\nmsgid \"Subscribe to checklist updates of other users. By default you are notified on checklist items to and from you only.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_ids\nmsgid \"Subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_id\nmsgid \"Subtask Message\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\n#: selection:project.task.subtask,state:0\nmsgid \"TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Task\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_state\nmsgid \"Task state\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:project.task.subtask,task_state:project_task_subtask.project_task_subtask_1\nmsgid \"To Do\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#. openerp-web\n#: code:addons/project_task_subtask/static/src/xml/templates.xml:7\n#, python-format\nmsgid \"Unsort\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Waiting\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task_subtask\nmsgid \"project.task.subtask\"\nmsgstr \"\"\n\n"
  },
  {
    "path": "project_task_subtask/i18n/ru.po",
    "content": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * project_task_subtask\n# \n# Translators:\n# Dinar <gabbasov@it-projects.info>, 2017\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Odoo Server 10.0\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2017-11-22 11:27+0000\\n\"\n\"PO-Revision-Date: 2017-11-22 11:27+0000\\n\"\n\"Last-Translator: Dinar <gabbasov@it-projects.info>, 2017\\n\"\n\"Language-Team: Russian (https://www.transifex.com/it-projects-llc/teams/76080/ru/)\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: \\n\"\n\"Language: ru\\n\"\n\"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\\n\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,name:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,name:project_task_subtask.subtasks_subtype\nmsgid \"All checklist updates\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_user_id\nmsgid \"Assigned to\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Cancelled\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to CANCELLED\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to DONE\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.actions.act_window,name:project_task_subtask.action_view_subtask\n#: model:ir.ui.menu,name:project_task_subtask.menu_action_view_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Checklist\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_uid\nmsgid \"Created by\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_date\nmsgid \"Created on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_default_user\nmsgid \"Default user\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_name\nmsgid \"Description\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_display_name\nmsgid \"Display Name\"\nmsgstr \"Отображаемое имя\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Done\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Filter\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Group By\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_hide_button\nmsgid \"Hide button\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_id\nmsgid \"ID\"\nmsgstr \"ID\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_kanban_subtasks\nmsgid \"Kanban subtasks\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask___last_update\nmsgid \"Last Modified on\"\nmsgstr \"Последний раз редактировалось\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_uid\nmsgid \"Last Updated by\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_date\nmsgid \"Last Updated on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"My\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:60\n#: code:addons/project_task_subtask/models/project_task_subtask.py:64\n#, python-format\nmsgid \"Only users related to that subtask can change state.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_project_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Project\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_recolor\nmsgid \"Recolor\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_reviewer_id\nmsgid \"Reviewer\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"State\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_state\nmsgid \"Status\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,description:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,description:project_task_subtask.subtasks_subtype\nmsgid \"\"\n\"Subscribe to checklist updates of other users. By default you are notified \"\n\"on checklist items to and from you only.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_ids\nmsgid \"Subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_id\nmsgid \"Subtask Message\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\n#: selection:project.task.subtask,state:0\nmsgid \"TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Task\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Task Work\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_state\nmsgid \"Task state\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:project.task.subtask,task_state:project_task_subtask.project_task_subtask_1\nmsgid \"To Do\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Waiting\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task_subtask\nmsgid \"project.task.subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.subtask_list_view\nmsgid \"subtask_list_form\"\nmsgstr \"\"\n"
  },
  {
    "path": "project_task_subtask/i18n/sl.po",
    "content": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * project_task_subtask\n# \n# Translators:\n# Translation Bot <i18n-bot@it-projects.info>, 2017\nmsgid \"\"\nmsgstr \"\"\n\"Project-Id-Version: Odoo Server 10.0\\n\"\n\"Report-Msgid-Bugs-To: \\n\"\n\"POT-Creation-Date: 2017-07-24 07:50+0000\\n\"\n\"PO-Revision-Date: 2017-07-24 07:50+0000\\n\"\n\"Last-Translator: Translation Bot <i18n-bot@it-projects.info>, 2017\\n\"\n\"Language-Team: Slovenian (https://www.transifex.com/it-projects-llc/teams/76080/sl/)\\n\"\n\"MIME-Version: 1.0\\n\"\n\"Content-Type: text/plain; charset=UTF-8\\n\"\n\"Content-Transfer-Encoding: \\n\"\n\"Language: sl\\n\"\n\"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\\n\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,name:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,name:project_task_subtask.subtasks_subtype\nmsgid \"All checklist updates\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_user_id\nmsgid \"Assigned to\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Cancelled\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to CANCELLED\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to DONE\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Change state to TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.actions.act_window,name:project_task_subtask.action_view_subtask\n#: model:ir.ui.menu,name:project_task_subtask.menu_action_view_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Checklist\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_uid\nmsgid \"Created by\"\nmsgstr \"Ustvaril\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_create_date\nmsgid \"Created on\"\nmsgstr \"Ustvarjeno\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_default_user\nmsgid \"Default user\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_name\nmsgid \"Description\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_display_name\nmsgid \"Display Name\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: selection:project.task.subtask,state:0\nmsgid \"Done\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Filter\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Group By\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_hide_button\nmsgid \"Hide button\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_id\nmsgid \"ID\"\nmsgstr \"ID\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_kanban_subtasks\nmsgid \"Kanban subtasks\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask___last_update\nmsgid \"Last Modified on\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_uid\nmsgid \"Last Updated by\"\nmsgstr \"Zadnjič posodobil\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_write_date\nmsgid \"Last Updated on\"\nmsgstr \"Zadnjič posodobljeno\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"My\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:62\n#, python-format\nmsgid \"Only reviewer can change description.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: code:addons/project_task_subtask/models/project_task_subtask.py:58\n#, python-format\nmsgid \"Only users related to that subtask can change state.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_project_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Project\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_recolor\nmsgid \"Recolor\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_reviewer_id\nmsgid \"Reviewer\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"State\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_state\nmsgid \"Status\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:mail.message.subtype,description:project_task_subtask.all_subtask_subtype\n#: model:mail.message.subtype,description:project_task_subtask.subtasks_subtype\nmsgid \"\"\n\"Subscribe to checklist updates of other users. By default you are notified \"\n\"on checklist items to and from you only.\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_ids\nmsgid \"Subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_id\nmsgid \"Subtask Message\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\n#: selection:project.task.subtask,state:0\nmsgid \"TODO\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_id\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"Task\"\nmsgstr \"Opravilo\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.view_task_form2\nmsgid \"Task Work\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model.fields,field_description:project_task_subtask.field_project_task_subtask_task_state\nmsgid \"Task state\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.project_task_subtask_view_search\nmsgid \"User\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.model,name:project_task_subtask.model_project_task_subtask\nmsgid \"project.task.subtask\"\nmsgstr \"\"\n\n#. module: project_task_subtask\n#: model:ir.ui.view,arch_db:project_task_subtask.subtask_list_view\nmsgid \"subtask_list_form\"\nmsgstr \"\"\n"
  },
  {
    "path": "project_task_subtask/models/__init__.py",
    "content": "from . import project_task_subtask\n"
  },
  {
    "path": "project_task_subtask/models/project_task_subtask.py",
    "content": "from odoo import api, fields, models\nfrom odoo.exceptions import Warning as UserError\nfrom odoo.tools import html_escape as escape\nfrom odoo.tools.translate import _\n\nSUBTASK_STATES = {\n    \"done\": \"Done\",\n    \"todo\": \"TODO\",\n    \"waiting\": \"Waiting\",\n    \"cancelled\": \"Cancelled\",\n}\n\n\nclass ProjectTaskSubtask(models.Model):\n    _name = \"project.task.subtask\"\n    _description = \"Subtask\"\n    _inherit = [\"mail.activity.mixin\"]\n    state = fields.Selection(\n        [(k, v) for k, v in list(SUBTASK_STATES.items())],\n        \"Status\",\n        required=True,\n        copy=False,\n        default=\"todo\",\n    )\n    name = fields.Char(required=True, string=\"Description\")\n    reviewer_id = fields.Many2one(\n        \"res.users\", \"Reviewer\", readonly=True, default=lambda self: self.env.user\n    )\n    project_id = fields.Many2one(\n        \"project.project\", related=\"task_id.project_id\", store=True\n    )\n    user_id = fields.Many2one(\"res.users\", \"Assigned to\", required=True)\n    task_id = fields.Many2one(\n        \"project.task\", \"Task\", ondelete=\"cascade\", required=True, index=\"1\"\n    )\n    task_state = fields.Char(\n        string=\"Task state\", related=\"task_id.stage_id.name\", readonly=True\n    )\n    hide_button = fields.Boolean(compute=\"_compute_hide_button\")\n    recolor = fields.Boolean(compute=\"_compute_recolor\")\n    deadline = fields.Datetime(string=\"Deadline\")\n\n    def _compute_recolor(self):\n        for record in self:\n            if self.env.user == record.user_id and record.state == \"todo\":\n                record.recolor = True\n            else:\n                record.recolor = False\n\n    def _compute_hide_button(self):\n        for record in self:\n            if self.env.user not in [record.reviewer_id, record.user_id]:\n                record.hide_button = True\n            else:\n                record.hide_button = False\n\n    def _compute_reviewer_id(self):\n        for record in self:\n            record.reviewer_id = record.create_uid\n\n    @api.model\n    def _needaction_domain_get(self):\n        if self._needaction:\n            return [(\"state\", \"=\", \"todo\"), (\"user_id\", \"=\", self.env.uid)]\n        return []\n\n    def write(self, vals):\n        old_names = dict(list(zip(self.mapped(\"id\"), self.mapped(\"name\"))))\n        result = super(ProjectTaskSubtask, self).write(vals)\n        for r in self:\n            if vals.get(\"state\"):\n                r.task_id.send_subtask_email(\n                    r.name, r.state, r.reviewer_id.id, r.user_id.id\n                )\n                if self.env.user != r.reviewer_id and self.env.user != r.user_id:\n                    raise UserError(\n                        _(\"Only users related to that subtask can change state.\")\n                    )\n            if vals.get(\"name\"):\n                r.task_id.send_subtask_email(\n                    r.name,\n                    r.state,\n                    r.reviewer_id.id,\n                    r.user_id.id,\n                    old_name=old_names[r.id],\n                )\n                if self.env.user != r.reviewer_id and self.env.user != r.user_id:\n                    raise UserError(\n                        _(\"Only users related to that subtask can change state.\")\n                    )\n            if vals.get(\"user_id\"):\n                r.task_id.send_subtask_email(\n                    r.name, r.state, r.reviewer_id.id, r.user_id.id\n                )\n        return result\n\n    @api.model\n    def create(self, vals):\n        result = super(ProjectTaskSubtask, self).create(vals)\n        vals = self._add_missing_default_values(vals)\n        task = self.env[\"project.task\"].browse(vals.get(\"task_id\"))\n        task.send_subtask_email(\n            vals[\"name\"], vals[\"state\"], vals[\"reviewer_id\"], vals[\"user_id\"]\n        )\n        return result\n\n    def change_state_done(self):\n        for record in self:\n            record.state = \"done\"\n\n    def change_state_todo(self):\n        for record in self:\n            record.state = \"todo\"\n\n    def change_state_cancelled(self):\n        for record in self:\n            record.state = \"cancelled\"\n\n    def change_state_waiting(self):\n        for record in self:\n            record.state = \"waiting\"\n\n\nclass Task(models.Model):\n    _inherit = \"project.task\"\n    subtask_ids = fields.One2many(\"project.task.subtask\", \"task_id\", \"Subtask\")\n    kanban_subtasks = fields.Text(compute=\"_compute_kanban_subtasks\")\n    default_user = fields.Many2one(\"res.users\", compute=\"_compute_default_user\")\n    completion = fields.Integer(\"Completion\", compute=\"_compute_completion\")\n    completion_xml = fields.Text(compute=\"_compute_completion_xml\")\n\n    def _compute_default_user(self):\n        for record in self:\n            if self.env.user != record.user_id and self.env.user != record.create_uid:\n                record.default_user = record.user_id\n            else:\n                if self.env.user != record.user_id:\n                    record.default_user = record.user_id\n                elif self.env.user != record.create_uid:\n                    record.default_user = record.create_uid\n                elif (\n                    self.env.user == record.create_uid\n                    and self.env.user == record.user_id\n                ):\n                    record.default_user = self.env.user\n\n    def _compute_kanban_subtasks(self):\n        for record in self:\n            result_string_td = \"\"\n            result_string_wt = \"\"\n            if record.subtask_ids:\n                task_todo_ids = record.subtask_ids.filtered(\n                    lambda x: x.state == \"todo\" and x.user_id.id == record.env.user.id\n                )\n                task_waiting_ids = record.subtask_ids.filtered(\n                    lambda x: x.state == \"waiting\"\n                    and x.user_id.id == record.env.user.id\n                )\n                if task_todo_ids:\n                    tmp_string_td = escape(\": {}\".format(len(task_todo_ids)))\n                    result_string_td += \"<li><b>TODO{}</b></li>\".format(tmp_string_td)\n                if task_waiting_ids:\n                    tmp_string_wt = escape(\": {}\".format(len(task_waiting_ids)))\n                    result_string_wt += \"<li><b>Waiting{}</b></li>\".format(\n                        tmp_string_wt\n                    )\n            record.kanban_subtasks = (\n                '<div class=\"kanban_subtasks\"><ul>'\n                + result_string_td\n                + result_string_wt\n                + \"</ul></div>\"\n            )\n\n    def _compute_completion(self):\n        for record in self:\n            record.completion = record.task_completion()\n\n    def _compute_completion_xml(self):\n        for record in self:\n            active_subtasks = record.subtask_ids and record.subtask_ids.filtered(\n                lambda x: x.user_id.id == record.env.user.id and x.state != \"cancelled\"\n            )\n            if not active_subtasks:\n                record.completion_xml = \"\"\"\n                    <div class=\"task_progress\">\n                    </div>\n                    \"\"\"\n                continue\n\n            completion = record.task_completion()\n            color = \"bg-success-full\"\n            if completion < 50:\n                color = \"bg-danger-full\"\n            record.completion_xml = \"\"\"\n            <div class=\"task_progress\">\n                <div class=\"progress_info\">\n                    Your Checklist:\n                </div>\n                <div class =\"o_kanban_counter_progress progress task_progress_bar\">\n                    <div data-filter=\"done\"\n                         class =\"progress-bar {1} o_bar_has_records task_progress_bar_done\"\n                         data-original-title=\"1 done\"\n                         style=\"width: {0}%;\">\n                    </div>\n                    <div data-filter=\"blocked\"\n                         class =\"progress-bar bg-danger-full\"\n                         data-original-title=\"0 blocked\">\n                    </div>\n                </div>\n                <div class=\"task_completion\"> {0}% </div>\n            </div>\n            \"\"\".format(\n                int(completion), color\n            )\n\n    def task_completion(self):\n        user_task_ids = self.subtask_ids.filtered(\n            lambda x: x.user_id.id == self.env.user.id and x.state != \"cancelled\"\n        )\n        if not user_task_ids:\n            return 100\n        user_done_task_ids = user_task_ids.filtered(lambda x: x.state == \"done\")\n        return (len(user_done_task_ids) / len(user_task_ids)) * 100\n\n    def send_subtask_email(\n        self,\n        subtask_name,\n        subtask_state,\n        subtask_reviewer_id,\n        subtask_user_id,\n        old_name=None,\n    ):\n        for r in self:\n            body = \"\"\n            reviewer = self.env[\"res.users\"].browse(subtask_reviewer_id)\n            user = self.env[\"res.users\"].browse(subtask_user_id)\n            state = SUBTASK_STATES[subtask_state]\n            if subtask_state == \"done\":\n                state = '<span style=\"color:#080\">' + state + \"</span>\"\n            if subtask_state == \"todo\":\n                state = '<span style=\"color:#A00\">' + state + \"</span>\"\n            if subtask_state == \"cancelled\":\n                state = '<span style=\"color:#777\">' + state + \"</span>\"\n            if subtask_state == \"waiting\":\n                state = '<span style=\"color:#b818ce\">' + state + \"</span>\"\n            partner_ids = []\n            subtype = \"project_task_subtask.subtasks_subtype\"\n            if user == self.env.user and reviewer == self.env.user:\n                body = \"<p>\" + \"<strong>\" + state + \"</strong>: \" + escape(subtask_name)\n                subtype = False\n            elif self.env.user == reviewer:\n                body = (\n                    \"<p>\"\n                    + escape(user.name)\n                    + \", <br><strong>\"\n                    + state\n                    + \"</strong>: \"\n                    + escape(subtask_name)\n                )\n                partner_ids = [user.partner_id.id]\n            elif self.env.user == user:\n                body = (\n                    \"<p>\"\n                    + escape(reviewer.name)\n                    + ', <em style=\"color:#999\">I updated checklist item assigned to me:</em> <br><strong>'  # noqa: B950\n                    + state\n                    + \"</strong>: \"\n                    + escape(subtask_name)\n                )\n                partner_ids = [reviewer.partner_id.id]\n            else:\n                body = (\n                    \"<p>\"\n                    + escape(user.name)\n                    + \", \"\n                    + escape(reviewer.name)\n                    + ', <em style=\"color:#999\">I updated checklist item, now its assigned to '\n                    + escape(user.name)\n                    + \": </em> <br><strong>\"\n                    + state\n                    + \"</strong>: \"\n                    + escape(subtask_name)\n                )\n                partner_ids = [user.partner_id.id, reviewer.partner_id.id]\n            if old_name:\n                body = (\n                    body\n                    + '<br><em style=\"color:#999\">Updated from</em><br><strong>'\n                    + state\n                    + \"</strong>: \"\n                    + escape(old_name)\n                    + \"</p>\"\n                )\n            else:\n                body = body + \"</p>\"\n            r.message_post(\n                message_type=\"comment\",\n                subtime_xmlid=subtype,\n                body=body,\n                partner_ids=partner_ids,\n            )\n\n    def copy(self, default=None):\n        task = super(Task, self).copy(default)\n        for subtask in self.subtask_ids:\n            subtask.copy({\"task_id\": task.id, \"state\": subtask.state})\n        return task\n"
  },
  {
    "path": "project_task_subtask/readme/CONTRIBUTORS.md",
    "content": "- Ivan Yelizariev (https://github.com/yelizariev)\n- Rafael Manaev (https://github.com/manawi)\n- Ilmir Karamov (https://github.com/ilmir-k)\n- Ildar Nasyrov (https://github.com/iledarn)\n- Nicolas Jeudy (https://github.com/njeudy)\n- Alexandr Kolushov (https://github.com/KolushovAlexandr)\n- Almas Giniatullin (https://github.com/almas50)\n- Denis Mudarisov (https://github.com/trojikman)\n- Vildan Safin (https://github.com/Enigma228322)\n- Eugene Molotov (https://github.com/em230418)\n- Victor Bykov (https://github.com/BykovVik)\n"
  },
  {
    "path": "project_task_subtask/readme/DESCRIPTION.md",
    "content": "Use subtasks to control your tasks. Be ensure that all your tasks/subtasks are performed and not missed.\n\nFeatures:\n\n* Added new \"Checklist\" tab on task's form\n* When new subtask is created\\changed, message is sent to user that assigned to this subtask\n* Only users related to subtask can change subtask parameters\n* All subtasks have a certain color, informing about their state\n* Each subtask has buttons to switch state:\n\n * DONE\n * TODO\n * CANCELLED\n\n* Added new \"Checklist\" menu\n\n * default filter: \"My\", \"TODO\"\n * optional group by: \"Project\", \"Task\", \"User\", \"State\"\n"
  },
  {
    "path": "project_task_subtask/readme/USAGE.md",
    "content": "* Create User1 and User2 in the ``Settings >> Users`` menu\n* Login as User1\n\n  * Go to ``Project >> Project >> All Tasks`` and open the ``Checklist`` tab\n  * Create new subtask (Assigned to - User2)\n\n* Login as User2\n\n  * See message in Inbox like \"TODO: subtask_name\"\n  * Change state of subtask to Cancelled/Done\n  * You can see a message in Inbox \"Cancelled: subtask_name\" or \"Done: subtask_name\" accordingly.\n\n* You can see your TODOs on tasks in kanban view in the ``Project >> Project >> Tasks`` menu\n* The ``Project >> Project >> Checklist`` menu displays ALL subtasks in state TODO assigned to you and subtasks where you are Reviewer\n"
  },
  {
    "path": "project_task_subtask/security/ir.model.access.csv",
    "content": "id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink\naccess_task_subtask,project.task.subtask,model_project_task_subtask,project.group_project_user,1,1,1,0\n"
  },
  {
    "path": "project_task_subtask/static/description/index.html",
    "content": "<section class=\"oe_container\">\n    <div class=\"oe_row oe_spaced\">\n        <div class=\"oe_span12\">\n            <h2 class=\"oe_slogan\" style=\"color:#875A7B;\">Project Task Checklist</h2>\n            <h3 class=\"oe_slogan\">Use checklist to be ensure that all your tasks are performed and to make easy control over them</h3>\n        </div>\n    </div>\n</section>\n\n<section class=\"oe_container\">\n  <div class=\"oe_row oe_spaced\">\n    <div class=\"oe_span12\">\n      <p class=\"oe_mt32\">\n\t\t<div class=\"alert alert-info\" style=\"padding:8px;font-weight: 300; font-size: 20px;\">\n\t\t  <i class=\"fa fa-hand-o-right\"></i><b> Key features: </b>\n\t\t\t<ul class=\"list-unstyled\">\n\t\t\t  <li>\n\t\t\t\t<i class=\"fa fa-check-square-o text-primary\"></i>\n\t\t\t\tcreate checklist for any tasks\n\t\t\t  </li>\n\t\t\t  <li>\n\t\t\t\t<i class=\"fa fa-check-square-o text-primary\"></i>\n\t\t\t\ttrack all subtasks that should be done and keep them under control\n\t\t\t  </li>\n\t\t\t  <li>\n\t\t\t\t<i class=\"fa fa-check-square-o text-primary\"></i>\n\t\t\t\tchecklist items will be colored depending on their state\n\t\t\t  </li>\n\t\t\t  <li>\n\t\t\t\t<i class=\"fa fa-check-square-o text-primary\"></i>\n\t\t\t\tonly users related to subtask can change subtask parameters\n\t\t\t  </li>\n\t\t\t  <li>\n\t\t\t\t<i class=\"fa fa-check-square-o text-primary\"></i>\n\t\t\t\tsee instant email notifications in task mail thread and your Inbox\n\t\t\t  </li>\n\t\t\t</ul>\n\t\t</div>\n      </p>\n    </div>\n  </div>\n</section>\n\n<section class=\"oe_container\">\n  <div class=\"oe_row oe_spaced\">\n\t<h3 class=\"oe_slogan\">How It Works</h3>\n        <div class=\"oe_span12\" >\n          <p class=\"oe_mt32\">\n\t\t\tGo to <em>Project &rarr; Tasks</em> menu and create/open a task. Here you can see new \"Checklist\" tab.\n\t\t\tAdd items (hereinafter \"subtasks\") into your checklist. <br/>\n\t\t\tSpecify <em>\"Description\"</em> and select <em>\"Assigned to\"</em>, <em>\"Reviewer\"</em>.\n          </p>\n        </div>\n        <div class=\"oe_row_img oe_centered\">\n          <img class=\"oe_demo oe_picture oe_screenshot\" src=\"checklist.png\"/>\n        </div>\n  </div>\n</section>\n\n<section class=\"oe_container oe_dark\">\n  <div class=\"oe_row oe_spaced\">\n    <div class=\"oe_span12\">\n      <p class=\"oe_mt32\">\n\t\t<ul>\n\t\t  <li>if a subtask has state \"TODO\", it's colored in red for user assigned to subtask</li>\n\t\t  <li>if a subtask has state \"DONE\", it's colored in green</li>\n\t\t  <li>if a subtask has state \"CANCELLED\", it's colored in grey</li>\n\t\t</ul>\n      </p>\n\t  <p>\n\t\tIf you mistakenly switch state to \"DONE\" or \"CANCELLED\", you will be able to revert state to TODO by clicking on <img src=\"checklist_icon.png\">\n\t  </p>\n    </div>\n\t<div class=\"oe_row_img oe_centered\">\n      <img class=\"oe_demo oe_picture oe_screenshot\" src=\"checklist_color.png\"/>\n    </div>\n  </div>\n</section>\n\n<section class=\"oe_container\">\n  <div class=\"oe_row oe_spaced\">\n    <div class=\"oe_span12 text-center\">\n      <p class=\"oe_mt32\">\n\t\tAll checklist changes and updates are tracked on task mail thread and you will receive instant email notifications to your Inbox\n      </p>\n    </div>\n\t<div class=\"oe_row_img oe_centered\">\n      <img class=\"oe_demo oe_picture oe_screenshot\" src=\"checklist_mail.png\"/>\n    </div>\n  </div>\n</section>\n\n<section class=\"oe_container oe_dark\">\n  <div class=\"oe_row oe_spaced\">\n        <div class=\"oe_span12 text-center\">\n          <p class=\"oe_mt32\">\n\t\t\tYou can see your TODOs on tasks in kanban view\n          </p>\n        </div>\n        <div class=\"oe_row_img oe_centered\">\n          <img class=\"oe_demo oe_picture oe_screenshot\" src=\"checklist_kanban.png\"/>\n        </div>\n  </div>\n</section>\n\n<section class=\"oe_container\">\n  <div class=\"oe_row oe_spaced\">\n    <div class=\"oe_span12 text-center\">\n      <p class=\"oe_mt32\">\n\t\tTrack all your TODOs in one place and keep them under control. Go to the <em>Project &rarr; Checklist</em> menu to see them.\n      </p>\n    </div>\n\t<div class=\"oe_row_img oe_centered\">\n      <img class=\"oe_demo oe_picture oe_screenshot\" src=\"checklist_menu.png\"/>\n    </div>\n  </div>\n</section>\n\n<section class=\"oe_container\">\n  <div class=\"oe_row oe_spaced\">\n\t<h2 class=\"oe_slogan\" style=\"color:#875A7B;\">Free Support</h2>\n\t<h3 class=\"oe_slogan\">You will get free support and assistance in case of any issues</h3>\n  </div>\n</section>\n\n<section class=\"oe_container\">\n    <div class=\"oe_row oe_spaced\">\n      <div class=\"oe_span12\">\n        <h2>Need our service?</h2>\n        <p class=\"oe_mt32\">Contact us by <a href=\"mailto:apps@it-projects.info\">email</a> or fill out <a href=\"https://www.it-projects.info/page/website.contactus \" target=\"_blank\">request form</a></p>\n        <ul>\n          <li><a href=\"mailto:apps@it-projects.info\">apps@it-projects.info <i class=\"fa fa-envelope-o\"></i></a></li>\n          <li><a href=\"https://www.it-projects.info/page/website.contactus \" target=\"_blank\">https://www.it-projects.info/page/website.contactus <i class=\"fa fa-list-alt\"></i></a></li>\n          <li><a href=\"https://m.me/itprojectsllc\" target=\"_blank\">https://m.me/itprojectsllc <i class=\"fa fa-facebook-square\"></i></a></li>\n          <li>skype@it-projects.info <i class=\"fa fa-skype\"></i></li>\n        </ul>\n      </div>\n    </div>\n</section>\n"
  },
  {
    "path": "project_task_subtask/static/src/css/kanban_styles.css",
    "content": ".task_progress {\n    width: 40%;\n    display: inline-block;\n    font-size: 10px;\n}\n\n.task_progress {\n    width: 40%;\n    display: inline-block;\n    font-size: 10px;\n}\n.task_progress .task_progress_bar {\n    width: 85%;\n    display: inline-block;\n    margin-bottom: 0px;\n    height: 10px;\n}\n.task_progress .task_progress_bar_done {\n    max-width: 100%;\n    min-width: 3%;\n}\n.task_progress .task_completion {\n    width: 10%;\n    display: inline-block;\n    height: 13px;\n}\n\n.kanban_subtasks {\n    width: 55%;\n    display: inline-block;\n    font-size: 10px;\n}\n.kanban_subtasks ul {\n    -webkit-padding-start: 30px;\n}\n"
  },
  {
    "path": "project_task_subtask/static/src/js/one2many_renderer.js",
    "content": "odoo.define(\"project_task_subtask.one2many_renderer\", function (require) {\n    \"use strict\";\n    var FieldOne2Many = require(\"web.relational_fields\").FieldOne2Many;\n    var BasicModel = require(\"web.BasicModel\");\n\n    var core = require(\"web.core\");\n    var QWeb = core.qweb;\n\n    FieldOne2Many.include({\n        check_task_tree_mode: function () {\n            if (\n                this.view &&\n                this.view.arch.tag === \"tree\" &&\n                this.record &&\n                this.record.model === \"project.task\" &&\n                this.name === \"subtask_ids\"\n            ) {\n                return true;\n            }\n            return false;\n        },\n\n        sort_data: function () {\n            var user_id = this.record.context.uid;\n\n            var new_rows = _.filter(this.value.data, function (d) {\n                return !d.res_id;\n            });\n            var data = _.difference(this.value.data, new_rows);\n\n            _.each(data, function (d) {\n                d.u_name = d.data.user_id.data.display_name;\n            });\n\n            var name_index = _.sortBy(\n                _.uniq(\n                    _.map(data, function (d) {\n                        return d.data.user_id.data.display_name;\n                    })\n                )\n            );\n\n            data = _.sortBy(data, \"u_name\");\n            _.each(data, function (d) {\n                d.deadline = d.data.deadline;\n                if (d.data.user_id.data.id === user_id) {\n                    d.index = 0;\n                } else {\n                    d.index =\n                        (_.indexOf(name_index, d.data.user_id.data.display_name) + 1) *\n                        1000000;\n                }\n            });\n\n            data = _.sortBy(data, \"deadline\");\n            _.each(data, function (d) {\n                d.index += _.indexOf(data, d);\n                if (!d.deadline) {\n                    d.index += 90000;\n                }\n                if (d.data.state === \"todo\") {\n                    // Continue\n                } else if (d.data.state === \"waiting\") {\n                    d.index += 100000;\n                } else if (d.data.state === \"done\") {\n                    d.index += 400000;\n                } else {\n                    // Makes cancelled subtasks stay last in line\n                    d.index += (name_index.length + 2) * 1000000;\n                    if (d.data.user_id.data.id !== user_id) {\n                        d.index +=\n                            (_.indexOf(name_index, d.data.user_id.data.display_name) +\n                                1) *\n                            1000000;\n                    }\n                }\n            });\n            data = _.sortBy(data, \"index\");\n            _.each(new_rows, function (r) {\n                data.push(r);\n            });\n            this.default_sorting = this.value.data;\n            this.value.data = data;\n        },\n\n        _render: function () {\n            if (this.check_task_tree_mode() && this.getParent().list_is_sorted) {\n                this.sort_data();\n            }\n            return this._super(arguments);\n        },\n\n        reset: function (record, ev, fieldChanged) {\n            var self = this;\n            return this._super.apply(this, arguments).then(function (res) {\n                if (self.check_task_tree_mode() && self.getParent().list_is_sorted) {\n                    self._render();\n                }\n            });\n        },\n\n        _renderButtons: function () {\n            var self = this;\n            if (this.check_task_tree_mode()) {\n                this.$buttons = $(\n                    QWeb.render(\"SubtaskSortButtons\", {\n                        check_button: this.getParent().list_is_sorted,\n                    })\n                );\n                this.$buttons.on(\n                    \"click\",\n                    \".o_pager_sort\",\n                    this._update_custom_sort_buttons.bind(this)\n                );\n                this.$buttons.on(\n                    \"click\",\n                    \".o_pager_unsort\",\n                    this._update_custom_unsort_buttons.bind(this)\n                );\n            }\n            return this._super(arguments);\n        },\n\n        _update_custom_sort_buttons: function () {\n            this.getParent().list_is_sorted = true;\n            this.default_sorting = this.value.data;\n            this._render();\n        },\n\n        _update_custom_unsort_buttons: function () {\n            this.getParent().list_is_sorted = false;\n            this.value.data = this.default_sorting;\n            this._render();\n        },\n    });\n\n    BasicModel.include({\n        _sortList: function (list) {\n            // Taken from odoo\n            if (!list.static) {\n                // Only sort x2many lists\n                return;\n            }\n            var self = this;\n            // -----\n\n            if (list.model === \"project.task.subtask\" && list.orderedResIDs) {\n                var rows = [];\n                var new_rows = [];\n                _.each(list.data, function (d) {\n                    var r = self.localData[d];\n                    if (Number(r.res_id) === r.res_id) {\n                        rows.push(r);\n                    } else {\n                        new_rows.push(r);\n                    }\n                });\n                rows = this.sort_data(rows, list.context.uid, this);\n                _.each(new_rows, function (r) {\n                    rows.push(r);\n                });\n                list.orderedResIDs = _.pluck(rows, \"res_id\");\n                return this._setDataInRange(list);\n            }\n\n            return this._super(list);\n        },\n\n        sort_data: function (data, user_id, parent) {\n            user_id = user_id || 1;\n\n            _.each(data, function (d) {\n                d.u_name = parent.localData[d.data.user_id].data.display_name;\n            });\n\n            var name_index = _.sortBy(\n                _.uniq(\n                    _.map(data, function (d) {\n                        return parent.localData[d.data.user_id].data.display_name;\n                    })\n                )\n            );\n\n            data = _.sortBy(data, \"u_name\");\n            _.each(data, function (d) {\n                d.deadline = d.data.deadline;\n                if (parent.localData[d.data.user_id].data.id === user_id) {\n                    d.index = 0;\n                } else {\n                    d.index =\n                        (_.indexOf(\n                            name_index,\n                            parent.localData[d.data.user_id].data.display_name\n                        ) +\n                            1) *\n                        1000000;\n                }\n            });\n\n            data = _.sortBy(data, \"deadline\");\n            _.each(data, function (d) {\n                d.index += _.indexOf(data, d);\n                if (!d.deadline) {\n                    d.index += 90000;\n                }\n                if (d.data.state === \"todo\") {\n                    // Continue\n                } else if (d.data.state === \"waiting\") {\n                    d.index += 100000;\n                } else if (d.data.state === \"done\") {\n                    d.index += 400000;\n                } else {\n                    d.index += 700000;\n                }\n            });\n            return _.sortBy(data, \"index\");\n        },\n    });\n});\n"
  },
  {
    "path": "project_task_subtask/static/src/js/tours/tour.js",
    "content": "odoo.define(\"project_task_subtask.tour\", function (require) {\n    \"use strict\";\n\n    var core = require(\"web.core\");\n    var tour = require(\"web_tour.tour\");\n\n    var _t = core._t;\n\n    var steps = [\n        tour.stepUtils.showAppsMenuItem(),\n        {\n            trigger: '.o_app[data-menu-xmlid=\"project.menu_main_pm\"]',\n            content: _t(\n                \"Want a better way to <b>manage your projects</b>? <i>It starts here.</i>\"\n            ),\n            position: \"right\",\n            edition: \"community\",\n        },\n        {\n            trigger: '.o_app[data-menu-xmlid=\"project.menu_main_pm\"]',\n            content: _t(\n                \"Want a better way to <b>manage your projects</b>? <i>It starts here.</i>\"\n            ),\n            position: \"bottom\",\n            edition: \"enterprise\",\n        },\n        {\n            trigger: \".o_project_kanban_main\",\n            content: \"open project\",\n            timeout: 10000,\n        },\n        {\n            trigger: \".o_loading\",\n            content: \"waiting for loading to finish\",\n            timeout: 5000,\n        },\n        {\n            trigger: \".o_content\",\n            content: \"just click\",\n            timeout: 1000,\n        },\n        {\n            trigger: \".oe_kanban_content\",\n            content: \"open task\",\n            timeout: 20000,\n        },\n        {\n            trigger: \".o_pager_sort\",\n            content: \"sort\",\n            timeout: 10000,\n        },\n        {\n            trigger: \".o_pager_unsort\",\n            content: \"unsort\",\n            timeout: 10000,\n        },\n    ];\n\n    tour.register(\"task_subtask\", {url: \"/web\"}, steps);\n});\n"
  },
  {
    "path": "project_task_subtask/static/src/xml/templates.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<template xml:space=\"preserve\">\n    <t t-name=\"SubtaskSortButtons\">\n        <div>\n            <button\n                aria-label=\"Sort\"\n                class=\"btn btn-sm btn-primary o_pager_sort\"\n                type=\"button\"\n                t-if=\"!check_button\"\n            >\n                Sort\n            </button>\n            <button\n                aria-label=\"Unsort\"\n                class=\"btn btn-sm btn-default o_pager_unsort\"\n                type=\"button\"\n                t-if=\"check_button\"\n            >\n                Unsort\n            </button>\n        </div>\n    </t>\n</template>\n"
  },
  {
    "path": "project_task_subtask/tests/__init__.py",
    "content": "# License MIT (https://opensource.org/licenses/MIT).\n\nfrom . import test_subtask_sort_button\n"
  },
  {
    "path": "project_task_subtask/tests/test_subtask_sort_button.py",
    "content": "import odoo.tests\n\n\nclass TestUi(odoo.tests.HttpCase):\n    def test_01_subtask_sort_button(self):\n        self.env[\"ir.module.module\"].search(\n            [(\"name\", \"=\", \"project_task_subtask\")], limit=1\n        ).state = \"installed\"\n        self.start_tour(\"/web\", \"task_subtask\", login=\"admin\")\n"
  },
  {
    "path": "project_task_subtask/views/assets.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<odoo>\n    <template\n        id=\"assets_backend\"\n        name=\"Project timelog assets\"\n        inherit_id=\"web.assets_backend\"\n    >\n        <xpath expr=\".\" position=\"inside\">\n            <link\n                rel=\"stylesheet\"\n                type=\"text/css\"\n                href=\"/project_task_subtask/static/src/css/kanban_styles.css\"\n            />\n            <script\n                type=\"text/javascript\"\n                src=\"/project_task_subtask/static/src/js/one2many_renderer.js\"\n            />\n        </xpath>\n    </template>\n    <template\n        id=\"assets_backend_web\"\n        name=\"project_task_subtask_backend_assets\"\n        inherit_id=\"web.assets_backend\"\n    >\n        <xpath expr=\".\" position=\"inside\">\n            <script\n                type=\"text/javascript\"\n                src=\"/project_task_subtask/static/src/js/tours/tour.js\"\n            />\n        </xpath>\n    </template>\n</odoo>\n"
  },
  {
    "path": "project_task_subtask/views/project_task_subtask.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<odoo>\n    <record id=\"view_task_form2\" model=\"ir.ui.view\">\n        <field name=\"name\">project.task.form</field>\n        <field name=\"model\">project.task</field>\n        <field name=\"inherit_id\" ref=\"project.view_task_form2\" />\n        <field name=\"arch\" type=\"xml\">\n            <xpath expr=\"//page[1]\" position=\"before\">\n                <page string=\"Checklist\">\n                    <field name=\"default_user\" invisible='True' />\n                    <field\n                        name=\"subtask_ids\"\n                        context=\"{'default_user_id': default_user}\"\n                    >\n                        <tree\n                            editable=\"bottom\"\n                            decoration-danger=\"recolor == True\"\n                            decoration-muted=\"state == 'cancelled'\"\n                            decoration-success=\"state == 'done'\"\n                            decoration-info=\"state == 'waiting'\"\n                        >\n                            <field name=\"name\" />\n                            <field name=\"recolor\" invisible='True' />\n                            <field name=\"user_id\" />\n                            <field name=\"state\" />\n                            <field name=\"hide_button\" invisible='True' />\n                            <button\n                                name=\"change_state_done\"\n                                title=\"Change state to DONE\"\n                                type=\"object\"\n                                icon=\"fa-check\"\n                                attrs=\"{'invisible': ['|', ('state', 'in',['done', 'cancelled']), ('hide_button', '=', True)]}\"\n                            />\n                            <button\n                                name=\"change_state_todo\"\n                                title=\"Change state to TODO\"\n                                type=\"object\"\n                                icon=\"fa-caret-square-o-right\"\n                                attrs=\"{'invisible': [ '|',('state', '=', 'todo'), ('hide_button', '=', True)]}\"\n                            />\n                            <button\n                                name=\"change_state_waiting\"\n                                type=\"object\"\n                                title=\"Change state to Waiting\"\n                                icon=\"fa-pause\"\n                                attrs=\"{'invisible': [ '|',('state', '=', 'waiting'), ('hide_button', '=', True)]}\"\n                            />\n                            <button\n                                name=\"change_state_cancelled\"\n                                type=\"object\"\n                                title=\"Change state to CANCELLED\"\n                                icon=\"fa-ban\"\n                                attrs=\"{'invisible': [ '|',('state', '=', 'cancelled'), ('hide_button', '=', True)]}\"\n                            />\n                            <field name=\"reviewer_id\" />\n                            <field name=\"deadline\" />\n                        </tree>\n                    </field>\n                </page>\n            </xpath>\n        </field>\n    </record>\n    <record id=\"view_task_kanban_subtasks\" model=\"ir.ui.view\">\n        <field name=\"name\">project.task.kanban.subtasks</field>\n        <field name=\"model\">project.task</field>\n        <field name=\"inherit_id\" ref=\"project.view_task_kanban\" />\n        <field name=\"arch\" type=\"xml\">\n            <xpath expr=\"//field[@name ='tag_ids']\" position=\"after\">\n                <field name=\"completion\" invisible=\"1\" />\n                <field name=\"subtask_ids\" invisible=\"1\" />\n                <field name=\"kanban_subtasks\" invisible=\"1\" />\n                <field name=\"completion_xml\" invisible=\"1\" />\n            </xpath>\n            <xpath expr=\"//div[hasclass('o_kanban_record_bottom')]\" position=\"before\">\n                <div>\n                    <t t-raw=\"record.completion_xml.raw_value\" />\n                    <t t-raw=\"record.kanban_subtasks.raw_value\" />\n                </div>\n            </xpath>\n        </field>\n    </record>\n    <record model=\"ir.ui.view\" id=\"view_id\">\n        <field name=\"name\">project.task.subtask</field>\n        <field name=\"model\">project.task.subtask</field>\n        <field name=\"arch\" type=\"xml\">\n            <form string=\"Subtask Message\">\n                <sheet>\n                    <group>\n                        <field name=\"name\" />\n                        <field name=\"user_id\" />\n                        <field name=\"state\" />\n                        <field name=\"task_id\" />\n                    </group>\n                </sheet>\n            </form>\n        </field>\n    </record>\n    <record id=\"project_task_subtask_view_search\" model=\"ir.ui.view\">\n        <field name=\"name\">project.task.subtask.filter</field>\n        <field name=\"model\">project.task.subtask</field>\n        <field name=\"arch\" type=\"xml\">\n            <search string=\"Filter\">\n                <field name=\"name\" string=\"Description\" />\n                <filter string=\"My\" domain=\"[('user_id','=',uid)]\" name=\"my_subtask\" />\n                <separator />\n                <filter\n                    string=\"TODO\"\n                    domain=\"[('state','=','todo')]\"\n                    name=\"done_subtask\"\n                />\n                <group expand=\"0\" string=\"Group By\">\n                    <filter\n                        string=\"Project\"\n                        name=\"project\"\n                        context=\"{'group_by':'project_id'}\"\n                    />\n                    <filter\n                        string=\"Task\"\n                        name=\"task\"\n                        context=\"{'group_by':'task_id'}\"\n                    />\n                    <filter\n                        string=\"User\"\n                        name=\"user\"\n                        context=\"{'group_by':'user_id'}\"\n                    />\n                </group>\n            </search>\n        </field>\n    </record>\n    <record model=\"ir.ui.view\" id=\"subtask_list_view\">\n        <field name=\"name\">subtask.list.form</field>\n        <field name=\"model\">project.task.subtask</field>\n        <field name=\"arch\" type=\"xml\">\n            <tree>\n                <field name=\"name\" />\n                <field name=\"user_id\" />\n                <field name=\"reviewer_id\" />\n                <field name=\"task_id\" />\n                <field name=\"task_state\" />\n            </tree>\n        </field>\n    </record>\n    <record id=\"action_view_subtask\" model=\"ir.actions.act_window\">\n        <field name=\"name\">Checklist</field>\n        <field name=\"res_model\">project.task.subtask</field>\n        <field name=\"view_mode\">tree,form</field>\n        <field name=\"context\">\n            {\n      'search_default_my_subtask': 1,\n      'search_default_done_subtask': 1,\n      }\n        </field>\n    </record>\n    <menuitem\n        name=\"Checklist\"\n        parent=\"project.menu_project_management\"\n        id=\"menu_action_view_subtask\"\n        action=\"action_view_subtask\"\n    />\n</odoo>\n"
  },
  {
    "path": "setup/.setuptools-odoo-make-default-ignore",
    "content": "# addons listed in this file are ignored by\n# setuptools-odoo-make-default (one addon per line)\n"
  },
  {
    "path": "setup/README",
    "content": "To learn more about this directory, please visit\nhttps://pypi.python.org/pypi/setuptools-odoo\n"
  },
  {
    "path": "setup/project_task_subtask/setup.py",
    "content": "import setuptools\n\nsetuptools.setup(\n    setup_requires=['setuptools-odoo'],\n    odoo_addon=True,\n)\n"
  }
]