Full Code of OCA/connector-telephony for AI

18.0 8c6a5b6fa020 cached
156 files
2.0 MB
529.5k tokens
982 symbols
1 requests
Download .txt
Showing preview only (2,118K chars total). Download the full file or copy to clipboard to get everything.
Repository: OCA/connector-telephony
Branch: 18.0
Commit: 8c6a5b6fa020
Files: 156
Total size: 2.0 MB

Directory structure:
gitextract_g2wxca02/

├── .copier-answers.yml
├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── pre-commit.yml
│       ├── stale.yml
│       └── test.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .pylintrc
├── .pylintrc-mandatory
├── .ruff.toml
├── LICENSE
├── README.md
├── base_phone/
│   ├── README.rst
│   ├── __init__.py
│   ├── __manifest__.py
│   ├── i18n/
│   │   ├── am_ET.po
│   │   ├── ar_001.po
│   │   ├── base_phone.pot
│   │   ├── ca_ES.po
│   │   ├── cs_CZ.po
│   │   ├── de.po
│   │   ├── el_GR.po
│   │   ├── es.po
│   │   ├── es_AR.po
│   │   ├── es_CR.po
│   │   ├── es_EC.po
│   │   ├── es_ES.po
│   │   ├── es_MX.po
│   │   ├── es_VE.po
│   │   ├── et_EE.po
│   │   ├── fi.po
│   │   ├── fr.po
│   │   ├── gl_ES.po
│   │   ├── hr.po
│   │   ├── it.po
│   │   ├── lt.po
│   │   ├── nl.po
│   │   ├── nl_BE.po
│   │   ├── pl.po
│   │   ├── pt.po
│   │   ├── pt_BR.po
│   │   ├── pt_PT.po
│   │   ├── ro.po
│   │   ├── ru.po
│   │   ├── sl_SI.po
│   │   ├── th.po
│   │   ├── tr.po
│   │   └── vi_VN.po
│   ├── models/
│   │   ├── __init__.py
│   │   ├── ir_fields_converter.py
│   │   ├── phone_common.py
│   │   ├── phone_validation_mixin.py
│   │   ├── res_company.py
│   │   └── res_partner.py
│   ├── pyproject.toml
│   ├── readme/
│   │   ├── CONTRIBUTORS.md
│   │   └── DESCRIPTION.md
│   ├── requirements.txt
│   ├── security/
│   │   ├── ir.model.access.csv
│   │   └── phone_security.xml
│   ├── static/
│   │   ├── description/
│   │   │   └── index.html
│   │   └── src/
│   │       └── components/
│   │           ├── on_dial_button/
│   │           │   ├── on_dial_button.esm.js
│   │           │   └── on_dial_button.xml
│   │           └── phone_field/
│   │               ├── phone_field.esm.js
│   │               └── phone_field.xml
│   ├── tests/
│   │   ├── __init__.py
│   │   └── test_base_phone.py
│   ├── views/
│   │   └── res_users_view.xml
│   └── wizard/
│       ├── __init__.py
│       ├── number_not_found.py
│       ├── number_not_found_view.xml
│       ├── reformat_all_phonenumbers.py
│       ├── reformat_all_phonenumbers_view.xml
│       ├── res_config_settings.py
│       └── res_config_settings.xml
├── checklog-odoo.cfg
├── eslint.config.cjs
├── prettier.config.cjs
├── requirements.txt
├── setup/
│   └── _metapackage/
│       └── pyproject.toml
└── voip_oca/
    ├── README.rst
    ├── __init__.py
    ├── __manifest__.py
    ├── data/
    │   └── neutralize.sql
    ├── demo/
    │   └── demo_data.xml
    ├── i18n/
    │   ├── it.po
    │   └── voip_oca.pot
    ├── models/
    │   ├── __init__.py
    │   ├── ir_http.py
    │   ├── mail_activity.py
    │   ├── mail_activity_mixin.py
    │   ├── res_partner.py
    │   ├── res_users.py
    │   ├── voip_call.py
    │   └── voip_pbx.py
    ├── pyproject.toml
    ├── readme/
    │   ├── CONFIGURE.md
    │   ├── CONTEXT.md
    │   ├── CONTRIBUTORS.md
    │   ├── CREDITS.md
    │   ├── DESCRIPTION.md
    │   ├── ROADMAP.md
    │   └── USAGE.md
    ├── security/
    │   └── ir.model.access.csv
    ├── static/
    │   ├── description/
    │   │   └── index.html
    │   ├── lib/
    │   │   └── sip.js
    │   ├── src/
    │   │   ├── components/
    │   │   │   ├── activity_list/
    │   │   │   │   ├── activity_list.esm.js
    │   │   │   │   ├── activity_list.scss
    │   │   │   │   └── activity_list.xml
    │   │   │   ├── call/
    │   │   │   │   ├── call.esm.js
    │   │   │   │   └── call.xml
    │   │   │   ├── call_list/
    │   │   │   │   ├── call_list.esm.js
    │   │   │   │   ├── call_list.scss
    │   │   │   │   └── call_list.xml
    │   │   │   ├── numpad/
    │   │   │   │   ├── numpad.esm.js
    │   │   │   │   ├── numpad.scss
    │   │   │   │   └── numpad.xml
    │   │   │   ├── partner/
    │   │   │   │   ├── partner.esm.js
    │   │   │   │   └── partner.xml
    │   │   │   ├── partner_list/
    │   │   │   │   ├── partner_list.esm.js
    │   │   │   │   ├── partner_list.scss
    │   │   │   │   └── partner_list.xml
    │   │   │   ├── phone_field/
    │   │   │   │   ├── phone_field.esm.js
    │   │   │   │   └── phone_field.xml
    │   │   │   ├── softphone/
    │   │   │   │   ├── softphone.esm.js
    │   │   │   │   ├── softphone.scss
    │   │   │   │   └── softphone.xml
    │   │   │   ├── transfer/
    │   │   │   │   ├── transfer.esm.js
    │   │   │   │   └── transfer.xml
    │   │   │   └── voip_oca_systray/
    │   │   │       ├── voip_oca_systray.esm.js
    │   │   │       ├── voip_oca_systray.scss
    │   │   │       └── voip_oca_systray.xml
    │   │   ├── core/
    │   │   │   └── phone/
    │   │   │       ├── @types/
    │   │   │       │   └── model.d.ts
    │   │   │       └── call_model.esm.js
    │   │   ├── services/
    │   │   │   ├── voip_agent_service.esm.js
    │   │   │   └── voip_oca_service.esm.js
    │   │   └── utils/
    │   │       └── utils.esm.js
    │   └── tests/
    │       ├── components/
    │       │   ├── ActivityTab.esm.test.js
    │       │   ├── CallTab.esm.test.js
    │       │   ├── NumpadTab.esm.test.js
    │       │   ├── PartnerTab.esm.test.js
    │       │   └── Softphone.esm.test.js
    │       ├── mock_server/
    │       │   └── mock_models/
    │       │       ├── mail_activity.esm.js
    │       │       ├── res_partner.esm.js
    │       │       ├── voip_call.esm.js
    │       │       └── voip_pbx.esm.js
    │       └── voip_test_helpers.esm.js
    ├── tests/
    │   ├── __init__.py
    │   ├── test_backend.py
    │   ├── test_frontend.py
    │   └── test_js.py
    └── views/
        ├── menus.xml
        ├── res_users.xml
        ├── voip_call.xml
        └── voip_pbx.xml

================================================
FILE CONTENTS
================================================

================================================
FILE: .copier-answers.yml
================================================
# Do NOT update manually; changes here will be overwritten by Copier
_commit: v1.40
_src_path: git+https://github.com/OCA/oca-addons-repo-template
additional_ruff_rules: []
convert_readme_fragments_to_markdown: true
enable_checklog_odoo: true
generate_requirements_txt: true
github_check_license: true
github_ci_extra_env: {}
github_enable_codecov: true
github_enable_makepot: true
github_enable_stale_action: true
github_enforce_dev_status_compatibility: true
include_wkhtmltopdf: false
odoo_test_flavor: Both
odoo_version: 18.0
org_name: Odoo Community Association (OCA)
org_slug: OCA
rebel_module_groups: []
repo_description: connector-telephony
repo_name: connector-telephony
repo_slug: connector-telephony
repo_website: https://github.com/OCA/connector-telephony
use_pyproject_toml: true
use_ruff: true



================================================
FILE: .editorconfig
================================================
# Configuration for known file extensions
[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]
charset = utf-8
end_of_line = lf
indent_size = 4
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

[*.{json,yml,yaml,rst,md}]
indent_size = 2

# Do not configure editor for libs and autogenerated content
[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
charset = unset
end_of_line = unset
indent_size = unset
indent_style = unset
insert_final_newline = false
trim_trailing_whitespace = false


================================================
FILE: .gitattributes
================================================
test-requirements.txt merge=union


================================================
FILE: .github/workflows/pre-commit.yml
================================================
name: pre-commit

on:
  pull_request:
    branches:
      - "18.0*"
  push:
    branches:
      - "18.0"
      - "18.0-ocabot-*"

jobs:
  pre-commit:
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.11"
          cache: 'pip'
          cache-dependency-path: '.pre-commit-config.yaml'
      - name: Get python version
        run: echo "PY=$(python -VV | sha256sum | cut -d' ' -f1)" >> $GITHUB_ENV
      - uses: actions/cache@v4
        with:
          path: ~/.cache/pre-commit
          key: pre-commit|${{ env.PY }}|${{ hashFiles('.pre-commit-config.yaml') }}
      - name: Install pre-commit
        run: pip install pre-commit
      - name: Run pre-commit
        run: pre-commit run --all-files --show-diff-on-failure --color=always
        env:
          # Consider valid a PR that changes README fragments but doesn't
          # change the README.rst file itself. It's not really a problem
          # because the bot will update it anyway after merge. This way, we
          # lower the barrier for functional contributors that want to fix the
          # readme fragments, while still letting developers get README
          # auto-generated (which also helps functionals when using runboat).
          # DOCS https://pre-commit.com/#temporarily-disabling-hooks
          SKIP: oca-gen-addon-readme
      - name: Check that all files generated by pre-commit are in git
        run: |
          newfiles="$(git ls-files --others --exclude-from=.gitignore)"
          if [ "$newfiles" != "" ] ; then
              echo "Please check-in the following files:"
              echo "$newfiles"
              exit 1
          fi


================================================
FILE: .github/workflows/stale.yml
================================================
name: Mark stale issues and pull requests

on:
  schedule:
    - cron: "0 12 * * 0"

jobs:
  stale:
    runs-on: ubuntu-latest
    steps:
      - name: Stale PRs and issues policy
        uses: actions/stale@v9
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          # General settings.
          ascending: true
          remove-stale-when-updated: true
          # Pull Requests settings.
          # 120+30 day stale policy for PRs
          # * Except PRs marked as "no stale"
          days-before-pr-stale: 120
          days-before-pr-close: 30
          exempt-pr-labels: "no stale"
          stale-pr-label: "stale"
          stale-pr-message: >
            There hasn't been any activity on this pull request in the past 4 months, so
            it has been marked as stale and it will be closed automatically if no
            further activity occurs in the next 30 days.

            If you want this PR to never become stale, please ask a PSC member to apply
            the "no stale" label.
          # Issues settings.
          # 180+30 day stale policy for open issues
          # * Except Issues marked as "no stale"
          days-before-issue-stale: 180
          days-before-issue-close: 30
          exempt-issue-labels: "no stale,needs more information"
          stale-issue-label: "stale"
          stale-issue-message: >
            There hasn't been any activity on this issue in the past 6 months, so it has
            been marked as stale and it will be closed automatically if no further
            activity occurs in the next 30 days.

            If you want this issue to never become stale, please ask a PSC member to
            apply the "no stale" label.

      # 15+30 day stale policy for issues pending more information
      # * Issues that are pending more information
      # * Except Issues marked as "no stale"
      - name: Needs more information stale issues policy
        uses: actions/stale@v9
        with:
          repo-token: ${{ secrets.GITHUB_TOKEN }}
          ascending: true
          only-labels: "needs more information"
          exempt-issue-labels: "no stale"
          days-before-stale: 15
          days-before-close: 30
          days-before-pr-stale: -1
          days-before-pr-close: -1
          remove-stale-when-updated: true
          stale-issue-label: "stale"
          stale-issue-message: >
            This issue needs more information and there hasn't been any activity
            recently, so it has been marked as stale and it will be closed automatically
            if no further activity occurs in the next 30 days.

            If you think this is a mistake, please ask a PSC member to remove the "needs
            more information" label.


================================================
FILE: .github/workflows/test.yml
================================================
name: tests

on:
  pull_request:
    branches:
      - "18.0*"
  push:
    branches:
      - "18.0"
      - "18.0-ocabot-*"

jobs:
  unreleased-deps:
    runs-on: ubuntu-latest
    name: Detect unreleased dependencies
    steps:
      - uses: actions/checkout@v4
      - run: |
          for reqfile in requirements.txt test-requirements.txt ; do
              if [ -f ${reqfile} ] ; then
                  result=0
                  # reject non-comment lines that contain a / (i.e. URLs, relative paths)
                  grep "^[^#].*/" ${reqfile} || result=$?
                  if [ $result -eq 0 ] ; then
                      echo "Unreleased dependencies found in ${reqfile}."
                      exit 1
                  fi
              fi
          done
  test:
    runs-on: ubuntu-22.04
    container: ${{ matrix.container }}
    name: ${{ matrix.name }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - container: ghcr.io/oca/oca-ci/py3.10-odoo18.0:latest
            name: test with Odoo
          - container: ghcr.io/oca/oca-ci/py3.10-ocb18.0:latest
            name: test with OCB
            makepot: "true"
    services:
      postgres:
        image: postgres:12
        env:
          POSTGRES_USER: odoo
          POSTGRES_PASSWORD: odoo
          POSTGRES_DB: odoo
        ports:
          - 5432:5432
    env:
      OCA_ENABLE_CHECKLOG_ODOO: "1"
    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
      - name: Install addons and dependencies
        run: oca_install_addons
      - name: Check licenses
        run: manifestoo -d . check-licenses
      - name: Check development status
        run: manifestoo -d . check-dev-status --default-dev-status=Beta
      - name: Initialize test db
        run: oca_init_test_database
      - name: Run tests
        run: oca_run_tests
      - name: Upload screenshots from JS tests
        uses: actions/upload-artifact@v4
        if: ${{ failure() }}
        with:
          name: Screenshots of failed JS tests - ${{ matrix.name }}${{ join(matrix.include) }}
          path: /tmp/odoo_tests/${{ env.PGDATABASE }}
          if-no-files-found: ignore
      - uses: codecov/codecov-action@v4
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
      - name: Update .pot files
        run: oca_export_and_push_pot https://x-access-token:${{ secrets.GIT_PUSH_TOKEN }}@github.com/${{ github.repository }}
        if: ${{ matrix.makepot == 'true' && github.event_name == 'push' && github.repository_owner == 'OCA' }}


================================================
FILE: .gitignore
================================================
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
/.venv
/.pytest_cache
/.ruff_cache

# C extensions
*.so

# Distribution / packaging
.Python
env/
bin/
build/
develop-eggs/
dist/
eggs/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
*.eggs

# Windows installers
*.msi

# Debian packages
*.deb

# Redhat packages
*.rpm

# MacOS packages
*.dmg
*.pkg

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.cache
nosetests.xml
coverage.xml

# Translations
*.mo

# Pycharm
.idea

# Eclipse
.settings

# Visual Studio cache/options directory
.vs/
.vscode

# OSX Files
.DS_Store

# Django stuff:
*.log

# Mr Developer
.mr.developer.cfg
.project
.pydevproject

# Rope
.ropeproject

# Sphinx documentation
docs/_build/

# Backup files
*~
*.swp

# OCA rules
!static/lib/


================================================
FILE: .pre-commit-config.yaml
================================================
exclude: |
  (?x)
  # NOT INSTALLABLE ADDONS
  # END NOT INSTALLABLE ADDONS
  # Files and folders generated by bots, to avoid loops
  ^setup/|/static/description/index\.html$|
  # We don't want to mess with tool-generated files
  .svg$|/tests/([^/]+/)?cassettes/|^.copier-answers.yml$|^.github/|^eslint.config.cjs|^prettier.config.cjs|
  # Maybe reactivate this when all README files include prettier ignore tags?
  ^README\.md$|
  # Library files can have extraneous formatting (even minimized)
  /static/(src/)?lib/|
  # Repos using Sphinx to generate docs don't need prettying
  ^docs/_templates/.*\.html$|
  # Don't bother non-technical authors with formatting issues in docs
  readme/.*\.(rst|md)$|
  # Ignore build and dist directories in addons
  /build/|/dist/|
  # Ignore test files in addons
  /tests/samples/.*|
  # You don't usually want a bot to modify your legal texts
  (LICENSE.*|COPYING.*)
default_language_version:
  python: python3
  node: "22.9.0"
repos:
  - repo: local
    hooks:
      # These files are most likely copier diff rejection junks; if found,
      # review them manually, fix the problem (if needed) and remove them
      - id: forbidden-files
        name: forbidden files
        entry: found forbidden files; remove them
        language: fail
        files: "\\.rej$"
      - id: en-po-files
        name: en.po files cannot exist
        entry: found a en.po file
        language: fail
        files: '[a-zA-Z0-9_]*/i18n/en\.po$'
      - id: obsolete dotfiles
        name: obsolete dotfiles
        entry: found obsolete files; remove them
        files: '^(\.travis\.yml|\.t2d\.yml|CONTRIBUTING\.md|\.prettierrc\.yml|\.eslintrc\.yml)$'
        language: fail
  - repo: https://github.com/sbidoul/whool
    rev: v1.3
    hooks:
      - id: whool-init
  - repo: https://github.com/oca/maintainer-tools
    rev: b89f767503be6ab2b11e4f50a7557cb20066e667
    hooks:
      # update the NOT INSTALLABLE ADDONS section above
      - id: oca-update-pre-commit-excluded-addons
      - id: oca-fix-manifest-website
        args: ["https://github.com/OCA/connector-telephony"]
      - id: oca-gen-addon-readme
        args:
          - --addons-dir=.
          - --branch=18.0
          - --org-name=OCA
          - --repo-name=connector-telephony
          - --if-source-changed
          - --keep-source-digest
          - --convert-fragments-to-markdown
      - id: oca-gen-external-dependencies
  - repo: https://github.com/OCA/odoo-pre-commit-hooks
    rev: v0.0.33
    hooks:
      - id: oca-checks-odoo-module
      - id: oca-checks-po
        args:
          - --disable=po-pretty-format
  - repo: local
    hooks:
      - id: prettier
        name: prettier (with plugin-xml)
        entry: prettier
        args:
          - --write
          - --list-different
          - --ignore-unknown
        types: [text]
        files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
        language: node
        additional_dependencies:
          - "prettier@3.3.3"
          - "@prettier/plugin-xml@3.4.1"
  - repo: local
    hooks:
      - id: eslint
        name: eslint
        entry: eslint
        args:
          - --color
          - --fix
        verbose: true
        types: [javascript]
        language: node
        additional_dependencies:
          - "eslint@9.12.0"
          - "eslint-plugin-jsdoc@50.3.1"
          - "globals@16.0.0"
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.6.0
    hooks:
      - id: trailing-whitespace
        # exclude autogenerated files
        exclude: /README\.rst$|\.pot?$
      - id: end-of-file-fixer
        # exclude autogenerated files
        exclude: /README\.rst$|\.pot?$
      - id: debug-statements
      - id: fix-encoding-pragma
        args: ["--remove"]
      - id: check-case-conflict
      - id: check-docstring-first
      - id: check-executables-have-shebangs
      - id: check-merge-conflict
        # exclude files where underlines are not distinguishable from merge conflicts
        exclude: /README\.rst$|^docs/.*\.rst$
      - id: check-symlinks
      - id: check-xml
      - id: mixed-line-ending
        args: ["--fix=lf"]
  - repo: https://github.com/astral-sh/ruff-pre-commit
    rev: v0.6.8
    hooks:
      - id: ruff
        args: [--fix, --exit-non-zero-on-fix]
      - id: ruff-format
  - repo: https://github.com/OCA/pylint-odoo
    rev: v9.1.3
    hooks:
      - id: pylint_odoo
        name: pylint with optional checks
        args:
          - --rcfile=.pylintrc
          - --exit-zero
        verbose: true
      - id: pylint_odoo
        args:
          - --rcfile=.pylintrc-mandatory


================================================
FILE: .pylintrc
================================================


[MASTER]
load-plugins=pylint_odoo
score=n

[ODOOLINT]
readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest-required-authors=Odoo Community Association (OCA)
manifest-required-keys=license
manifest-deprecated-keys=description,active
license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid-odoo-versions=18.0

[MESSAGES CONTROL]
disable=all

# This .pylintrc contains optional AND mandatory checks and is meant to be
# loaded in an IDE to have it check everything, in the hope this will make
# optional checks more visible to contributors who otherwise never look at a
# green travis to see optional checks that failed.
# .pylintrc-mandatory containing only mandatory checks is used the pre-commit
# config as a blocking check.

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


[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no


================================================
FILE: .pylintrc-mandatory
================================================

[MASTER]
load-plugins=pylint_odoo
score=n

[ODOOLINT]
readme-template-url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
manifest-required-authors=Odoo Community Association (OCA)
manifest-required-keys=license
manifest-deprecated-keys=description,active
license-allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
valid-odoo-versions=18.0

[MESSAGES CONTROL]
disable=all

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

[REPORTS]
msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
output-format=colorized
reports=no


================================================
FILE: .ruff.toml
================================================

target-version = "py310"
fix = true

[lint]
extend-select = [
    "B",
    "C90",
    "E501",  # line too long (default 88)
    "I",  # isort
    "UP",  # pyupgrade
]
extend-safe-fixes = ["UP008"]
exclude = ["setup/*"]

[format]
exclude = ["setup/*"]

[lint.per-file-ignores]
"__init__.py" = ["F401", "I001"]  # ignore unused and unsorted imports in __init__.py
"__manifest__.py" = ["B018"]  # useless expression

[lint.isort]
section-order = ["future", "standard-library", "third-party", "odoo", "odoo-addons", "first-party", "local-folder"]

[lint.isort.sections]
"odoo" = ["odoo"]
"odoo-addons" = ["odoo.addons"]

[lint.mccabe]
max-complexity = 16


================================================
FILE: LICENSE
================================================
                    GNU AFFERO GENERAL PUBLIC LICENSE
                       Version 3, 19 November 2007

 Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
 Everyone is permitted to copy and distribute verbatim copies
 of this license document, but changing it is not allowed.

                            Preamble

  The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.

  The licenses for most software and other practical works are designed
to take away your freedom to share and change the works.  By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.

  When we speak of free software, we are referring to freedom, not
price.  Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.

  Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.

  A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate.  Many developers of free software are heartened and
encouraged by the resulting cooperation.  However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.

  The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community.  It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server.  Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.

  An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals.  This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.

  The precise terms and conditions for copying, distribution and
modification follow.

                       TERMS AND CONDITIONS

  0. Definitions.

  "This License" refers to version 3 of the GNU Affero General Public License.

  "Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.

  "The Program" refers to any copyrightable work licensed under this
License.  Each licensee is addressed as "you".  "Licensees" and
"recipients" may be individuals or organizations.

  To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy.  The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.

  A "covered work" means either the unmodified Program or a work based
on the Program.

  To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy.  Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.

  To "convey" a work means any kind of propagation that enables other
parties to make or receive copies.  Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.

  An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License.  If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.

  1. Source Code.

  The "source code" for a work means the preferred form of the work
for making modifications to it.  "Object code" means any non-source
form of a work.

  A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.

  The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form.  A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.

  The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities.  However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work.  For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.

  The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.

  The Corresponding Source for a work in source code form is that
same work.

  2. Basic Permissions.

  All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met.  This License explicitly affirms your unlimited
permission to run the unmodified Program.  The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work.  This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.

  You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force.  You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright.  Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.

  Conveying under any other circumstances is permitted solely under
the conditions stated below.  Sublicensing is not allowed; section 10
makes it unnecessary.

  3. Protecting Users' Legal Rights From Anti-Circumvention Law.

  No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.

  When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.

  4. Conveying Verbatim Copies.

  You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.

  You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.

  5. Conveying Modified Source Versions.

  You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:

    a) The work must carry prominent notices stating that you modified
    it, and giving a relevant date.

    b) The work must carry prominent notices stating that it is
    released under this License and any conditions added under section
    7.  This requirement modifies the requirement in section 4 to
    "keep intact all notices".

    c) You must license the entire work, as a whole, under this
    License to anyone who comes into possession of a copy.  This
    License will therefore apply, along with any applicable section 7
    additional terms, to the whole of the work, and all its parts,
    regardless of how they are packaged.  This License gives no
    permission to license the work in any other way, but it does not
    invalidate such permission if you have separately received it.

    d) If the work has interactive user interfaces, each must display
    Appropriate Legal Notices; however, if the Program has interactive
    interfaces that do not display Appropriate Legal Notices, your
    work need not make them do so.

  A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit.  Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.

  6. Conveying Non-Source Forms.

  You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:

    a) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by the
    Corresponding Source fixed on a durable physical medium
    customarily used for software interchange.

    b) Convey the object code in, or embodied in, a physical product
    (including a physical distribution medium), accompanied by a
    written offer, valid for at least three years and valid for as
    long as you offer spare parts or customer support for that product
    model, to give anyone who possesses the object code either (1) a
    copy of the Corresponding Source for all the software in the
    product that is covered by this License, on a durable physical
    medium customarily used for software interchange, for a price no
    more than your reasonable cost of physically performing this
    conveying of source, or (2) access to copy the
    Corresponding Source from a network server at no charge.

    c) Convey individual copies of the object code with a copy of the
    written offer to provide the Corresponding Source.  This
    alternative is allowed only occasionally and noncommercially, and
    only if you received the object code with such an offer, in accord
    with subsection 6b.

    d) Convey the object code by offering access from a designated
    place (gratis or for a charge), and offer equivalent access to the
    Corresponding Source in the same way through the same place at no
    further charge.  You need not require recipients to copy the
    Corresponding Source along with the object code.  If the place to
    copy the object code is a network server, the Corresponding Source
    may be on a different server (operated by you or a third party)
    that supports equivalent copying facilities, provided you maintain
    clear directions next to the object code saying where to find the
    Corresponding Source.  Regardless of what server hosts the
    Corresponding Source, you remain obligated to ensure that it is
    available for as long as needed to satisfy these requirements.

    e) Convey the object code using peer-to-peer transmission, provided
    you inform other peers where the object code and Corresponding
    Source of the work are being offered to the general public at no
    charge under subsection 6d.

  A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.

  A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling.  In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage.  For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product.  A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.

  "Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source.  The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.

  If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information.  But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).

  The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed.  Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.

  Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.

  7. Additional Terms.

  "Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law.  If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.

  When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it.  (Additional permissions may be written to require their own
removal in certain cases when you modify the work.)  You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.

  Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:

    a) Disclaiming warranty or limiting liability differently from the
    terms of sections 15 and 16 of this License; or

    b) Requiring preservation of specified reasonable legal notices or
    author attributions in that material or in the Appropriate Legal
    Notices displayed by works containing it; or

    c) Prohibiting misrepresentation of the origin of that material, or
    requiring that modified versions of such material be marked in
    reasonable ways as different from the original version; or

    d) Limiting the use for publicity purposes of names of licensors or
    authors of the material; or

    e) Declining to grant rights under trademark law for use of some
    trade names, trademarks, or service marks; or

    f) Requiring indemnification of licensors and authors of that
    material by anyone who conveys the material (or modified versions of
    it) with contractual assumptions of liability to the recipient, for
    any liability that these contractual assumptions directly impose on
    those licensors and authors.

  All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10.  If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term.  If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.

  If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.

  Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.

  8. Termination.

  You may not propagate or modify a covered work except as expressly
provided under this License.  Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).

  However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.

  Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.

  Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License.  If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.

  9. Acceptance Not Required for Having Copies.

  You are not required to accept this License in order to receive or
run a copy of the Program.  Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance.  However,
nothing other than this License grants you permission to propagate or
modify any covered work.  These actions infringe copyright if you do
not accept this License.  Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.

  10. Automatic Licensing of Downstream Recipients.

  Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License.  You are not responsible
for enforcing compliance by third parties with this License.

  An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations.  If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.

  You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License.  For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.

  11. Patents.

  A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based.  The
work thus licensed is called the contributor's "contributor version".

  A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version.  For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.

  Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.

  In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement).  To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.

  If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients.  "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.

  If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.

  A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License.  You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.

  Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.

  12. No Surrender of Others' Freedom.

  If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License.  If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all.  For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.

  13. Remote Network Interaction; Use with the GNU General Public License.

  Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software.  This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.

  Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work.  The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.

  14. Revised Versions of this License.

  The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time.  Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.

  Each version is given a distinguishing version number.  If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation.  If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.

  If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.

  Later license versions may give you additional or different
permissions.  However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.

  15. Disclaimer of Warranty.

  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.

  16. Limitation of Liability.

  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.

  17. Interpretation of Sections 15 and 16.

  If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.

                     END OF TERMS AND CONDITIONS

            How to Apply These Terms to Your New Programs

  If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.

  To do so, attach the following notices to the program.  It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.

    <one line to give the program's name and a brief idea of what it does.>
    Copyright (C) <year>  <name of author>

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU Affero General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Affero General Public License for more details.

    You should have received a copy of the GNU Affero General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.

Also add information on how to contact you by electronic and paper mail.

  If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source.  For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code.  There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for the
specific requirements.

  You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU AGPL, see
<https://www.gnu.org/licenses/>.


================================================
FILE: README.md
================================================

[![Support the OCA](https://odoo-community.org/readme-banner-image)](https://odoo-community.org/get-involved?utm_source=repo-readme)

# connector-telephony
[![Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)](https://runboat.odoo-community.org/builds?repo=OCA/connector-telephony&target_branch=18.0)
[![Pre-commit Status](https://github.com/OCA/connector-telephony/actions/workflows/pre-commit.yml/badge.svg?branch=18.0)](https://github.com/OCA/connector-telephony/actions/workflows/pre-commit.yml?query=branch%3A18.0)
[![Build Status](https://github.com/OCA/connector-telephony/actions/workflows/test.yml/badge.svg?branch=18.0)](https://github.com/OCA/connector-telephony/actions/workflows/test.yml?query=branch%3A18.0)
[![codecov](https://codecov.io/gh/OCA/connector-telephony/branch/18.0/graph/badge.svg)](https://codecov.io/gh/OCA/connector-telephony)
[![Translation Status](https://translation.odoo-community.org/widgets/connector-telephony-18-0/-/svg-badge.svg)](https://translation.odoo-community.org/engage/connector-telephony-18-0/?utm_source=widget)

<!-- /!\ do not modify above this line -->

connector-telephony

<!-- /!\ do not modify below this line -->

<!-- prettier-ignore-start -->

[//]: # (addons)

Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
[base_phone](base_phone/) | 18.0.1.0.0 | <a href='https://github.com/alexis-via'><img src='https://github.com/alexis-via.png' width='32' height='32' style='border-radius:50%;' alt='alexis-via'/></a> | Validate phone numbers
[voip_oca](voip_oca/) | 18.0.1.0.2 | <a href='https://github.com/etobella'><img src='https://github.com/etobella.png' width='32' height='32' style='border-radius:50%;' alt='etobella'/></a> | Provides the use of Voip

[//]: # (end addons)

<!-- prettier-ignore-end -->

## Licenses

This repository is licensed under [AGPL-3.0](LICENSE).

However, each module can have a totally different license, as long as they adhere to Odoo Community Association (OCA)
policy. Consult each module's `__manifest__.py` file, which contains a `license` key
that explains its license.

----
OCA, or the [Odoo Community Association](http://odoo-community.org/), is a nonprofit
organization whose mission is to support the collaborative development of Odoo features
and promote its widespread use.


================================================
FILE: base_phone/README.rst
================================================
==========
Base Phone
==========

.. 
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! This file is generated by oca-gen-addon-readme !!
   !! changes will be overwritten.                   !!
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !! source digest: sha256:1685f77c2ab6988da842ee87e52d46d4e55bcd2c6bdbe568a730f0f352e2f133
   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
    :target: https://odoo-community.org/page/development-status
    :alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
    :alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fconnector--telephony-lightgray.png?logo=github
    :target: https://github.com/OCA/connector-telephony/tree/18.0/base_phone
    :alt: OCA/connector-telephony
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
    :target: https://translation.odoo-community.org/projects/connector-telephony-18-0/connector-telephony-18-0-base_phone
    :alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
    :target: https://runboat.odoo-community.org/builds?repo=OCA/connector-telephony&target_branch=18.0
    :alt: Try me on Runboat

|badge1| |badge2| |badge3| |badge4| |badge5|

This module provides common methods and wizards which can be useful to
develop a connector between Odoo and a telephony system. It depends on
the official module *phone_validation* which handle the reformatting of
phone numbers using the
`phonenumbers <https://github.com/daviddrysdale/python-phonenumbers>`__
Python library, which is a port of the library used in Android
smartphones. For example, if your user is linked to a French company and
you update the form view of a partner with a badly written French phone
number such as '01-55-42-12-42', Odoo will automatically update the
phone number to `E.164 <https://en.wikipedia.org/wiki/E.164>`__ format
'+33155421242'. This module extends this reformatting to create() and
write() methods.

This module is used by the Odoo-Asterisk connector of the OCA.

**Table of contents**

.. contents::
   :local:

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/connector-telephony/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/connector-telephony/issues/new?body=module:%20base_phone%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
-------

* Akretion

Contributors
------------

- Alexis de Lattre <alexis.delattre@akretion.com>
- Sébastien Beau <sebastien.beau@akretion.com>
- `Dixmit <https://www.dixmit.com>`__:

  - Luis David Rodríguez
  - Enric Tobella

- `Heliconia Solutions Pvt. Ltd. <https://www.heliconia.io>`__

  - Bhavesh Heliconia

Maintainers
-----------

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
   :alt: Odoo Community Association
   :target: https://odoo-community.org

OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.

.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
    :target: https://github.com/alexis-via
    :alt: alexis-via

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-alexis-via| 

This module is part of the `OCA/connector-telephony <https://github.com/OCA/connector-telephony/tree/18.0/base_phone>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.


================================================
FILE: base_phone/__init__.py
================================================
from . import models
from . import wizard


================================================
FILE: base_phone/__manifest__.py
================================================
# Copyright 2014-2021 Akretion France (http://www.akretion.com/)
# @author: Alexis de Lattre <alexis@via.ecp.fr>
# @migration from 12.0 to 13.0: Christophe Langenberg <Christophe@Langenberg.be>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
    "name": "Base Phone",
    "version": "18.0.1.0.0",
    "category": "Phone",
    "license": "AGPL-3",
    "summary": "Validate phone numbers",
    "author": "Akretion,Odoo Community Association (OCA)",
    "maintainers": ["alexis-via"],
    "website": "https://github.com/OCA/connector-telephony",
    "depends": ["phone_validation", "base_setup"],
    "external_dependencies": {"python": ["phonenumbers"]},
    "data": [
        "security/phone_security.xml",
        "security/ir.model.access.csv",
        "wizard/res_config_settings.xml",
        "views/res_users_view.xml",
        "wizard/reformat_all_phonenumbers_view.xml",
        "wizard/number_not_found_view.xml",
    ],
    "assets": {
        "web.assets_backend": [
            "base_phone/static/src/components/**/*",
        ],
    },
    "installable": True,
}


================================================
FILE: base_phone/i18n/am_ET.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:12+0000\n"
"PO-Revision-Date: 2023-05-01 07:12+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr "Cancelar"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr "ድርጅት"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr "Creado por"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr "Creado en"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr "Última actualización en"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be positive."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic "
"templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""


================================================
FILE: base_phone/i18n/ar_001.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:13+0000\n"
"PO-Revision-Date: 2023-05-01 07:13+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr "إلغاء"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr "الشركات "

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr "تهيئة الإعدادات "

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr "جهة الاتصال"

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be positive."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic "
"templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""


================================================
FILE: base_phone/i18n/base_phone.pot
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 18.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. "
"https://cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. "
"https://developers.google.com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be "
"positive."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""


================================================
FILE: base_phone/i18n/ca_ES.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:14+0000\n"
"PO-Revision-Date: 2023-05-01 07:14+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr "Cancel·la"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr "Empreses"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr "Ajustos de configuració"

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr "Contacte"

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr "Creat per"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr "Creat el"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr "Darrera Actualització per"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr "Darrera Actualització el"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be positive."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic "
"templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""


================================================
FILE: base_phone/i18n/cs_CZ.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:15+0000\n"
"PO-Revision-Date: 2023-05-01 07:15+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr "Zrušit"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr "Společnosti"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr "Nastavení konfigurace"

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr "Kontakt"

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be positive."
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic "
"templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""


================================================
FILE: base_phone/i18n/de.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:17+0000\n"
"PO-Revision-Date: 2023-05-01 07:17+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Calling Number"
msgstr "Anrufernummer"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Cancel"
msgstr "Abbruch"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial successfull"
msgstr "Click2dial erfolgreich"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Click2dial to %s"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Close"
msgstr "Schließen"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_website_cf_turnstile
msgid "Cloudflare Turnstile"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_common
msgid "Common methods for phone features"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_company
msgid "Companies"
msgstr "Unternehmen"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_id
msgid "Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid "Company Country Code"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_informations
msgid "Company Informations"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_name
msgid "Company Name"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_config_settings
msgid "Config Settings"
msgstr "Konfigurationseinstellungen"

#. module: base_phone
#: model:ir.model,name:base_phone.model_res_partner
msgid "Contact"
msgstr "Kontakt"

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create New Partner"
msgstr "Erstelle neuen Partner"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Create or Update a Partner"
msgstr "Einen Partner anlegen oder aktualisieren"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_uid
msgid "Created by"
msgstr "Erstellt von"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__create_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__create_date
msgid "Created on"
msgstr "Erstellt am"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_mobile
msgid "Current Mobile"
msgstr "Aktuelle Mobilnummer"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__current_partner_phone
msgid "Current Phone"
msgstr "Aktuelle Telefonnummer"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Custom Report Footer"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_uninvited
msgid "Customer Account"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__user_default_rights
msgid "Default Access Rights"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.xml:0
msgid "Dial"
msgstr "Wählen"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Dial phone"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__display_name
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__display_name
msgid "Display Name"
msgstr "Anzeigename"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_report_layout_id
msgid "Document Template"
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__done
msgid "Done"
msgstr "Ferig"

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__reformat_all_phonenumbers__state__draft
msgid "Draft"
msgstr "Entwurf"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__e164_number
msgid "E.164 Number"
msgstr "E.164 Nummer"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__e164_number
msgid "E.164 equivalent of the calling number."
msgstr "E.164 Entsprechung der Rufnummer."

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_secondary_color
msgid "Email Button Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__email_primary_color
msgid "Email Header Color"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_reset_password
msgid "Enable password reset from Login page"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__fail_counter
msgid "Fail Mail"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Fetch up to the specified number of GIF."
msgstr ""

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__phone
msgid "Fixed"
msgstr "Festnetz"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__number_type
msgid "Fixed/Mobile"
msgstr "Festnetz/Mobil"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__report_footer
msgid "Footer text displayed at the bottom of all reports."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_geolocalize
msgid "GeoLocalize"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_product_images
msgid "Get product pictures using barcode"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__id
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__id
msgid "ID"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid ""
"If you have setup a catch-all email domain redirected to the Odoo server, "
"enter the domain name here."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "If you want to use twilio as TURN/STUN server provider"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_company__number_of_digits_to_match_from_end
#: model:ir.model.fields,help:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid ""
"In several situations, Odoo will have to find a Partner/Lead/Employee/... "
"from a phone number presented by the calling party. As the phone numbers "
"presented by your phone operator may not always be displayed in a standard "
"format, the best method to find the related Partner/Lead/Employee/... in "
"Odoo is to try to match the end of the phone number in Odoo with the N last "
"digits of the phone number presented by the calling party. N is the value "
"you should enter in this field."
msgstr ""
"In einigen Situationen muss Odoo einen Partner/Mitarbeiter/… aus der vom "
"Anrufer übermittelten Telefonnummer finden. Da der Telefonanbieter nicht "
"immer in einem Standardformat sendet ist die beste Methode um die "
"entsprechenden Telefonnummer zu finden, das Ende der Telefonnummer mit den "
"letzten N Ziffern zu vergleichen. N ist der Wert, den Sie in dieses Feld "
"eingeben sollten."

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid "Incoming calls"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__is_root_company
msgid "Is Root Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_ldap
msgid "LDAP Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_uid
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert von"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__write_date
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_account_inter_company_rules
msgid "Manage Inter Company"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid "Message Translation API Key"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Missing country on company %s"
msgstr "Bei Unternehmen %s fehlt das Land"

#. module: base_phone
#: model:ir.model.fields.selection,name:base_phone.selection__number_not_found__number_type__mobile
msgid "Mobile"
msgstr "Mobil"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Multi-Currencies"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number Not Found"
msgstr "Nummer nicht gefunden"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Number converted to international format:"
msgstr "Nummer in internationales Format umgewandelt:"

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Number dialed: %s"
msgstr ""

#. module: base_phone
#: model:ir.model,name:base_phone.model_number_not_found
msgid "Number not found"
msgstr "Nummer nicht gefunden"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__active_user_count
msgid "Number of Active Users"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__company_count
msgid "Number of Companies"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__number_of_digits_to_match_from_end
#: model:ir.model.fields,field_description:base_phone.field_res_config_settings__number_of_digits_to_match_from_end
msgid "Number of Digits"
msgstr "Anzahl der übereinstimmenden Stellen vom Ende her"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_res_company__number_of_digits_to_match_from_end
msgid "Number of Digits To Match From End"
msgstr "Anzahl der übereinstimmenden Stellen vom Ende her"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__language_count
msgid "Number of Languages"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_partner_autocomplete
msgid "Partner Autocomplete"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner on which the phone number will be written"
msgstr "Partner dem die Telefonnummer zugewiesen wird"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__to_update_partner_id
msgid "Partner to Update"
msgstr "Zu aktualisierender Partner"

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Partner: %s"
msgstr ""

#. module: base_phone
#: model:res.groups,name:base_phone.group_callerid
msgid "Phone CallerID"
msgstr "Telefon Anrufer-ID"

#. module: base_phone
#: model:ir.model,name:base_phone.model_phone_validation_mixin
msgid "Phone Validation Mixin"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_number_not_found__calling_number
msgid ""
"Phone number of calling party that has been obtained from the telephony "
"server, in the format used by the telephony server (not E.164)."
msgstr ""
"Telefonnummer des Anrufers der vom Telefonieserver erhalten wurde, im Format "
"des Telefonieservers (nicht E.164)."

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__phonenumbers_not_reformatted
msgid "Phone numbers that couldn't be reformatted"
msgstr "Telefonnummern, die nicht umformatiert werden konnten"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Phone numbers that couldn't be reformatted:"
msgstr "Telefonnummern, die nicht umformatiert werden konnten:"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__profiling_enabled_until
msgid "Profiling enabled until"
msgstr ""

#. module: base_phone
#: model:ir.actions.act_window,name:base_phone.reformat_all_phonenumbers_action
#: model:ir.ui.menu,name:base_phone.reformat_all_phonenumbers_menu
msgid "Reformat Phone Numbers"
msgstr "Formatiere die Telefonnummern um"

#. module: base_phone
#: model:ir.model,name:base_phone.model_reformat_all_phonenumbers
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid "Reformat all phone numbers"
msgstr "Formatiere alle Telefonnummern um"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid "Restrict Template Rendering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_url
msgid "SFU Server URL"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "SFU Server key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_sms
msgid "SMS"
msgstr ""

#. module: base_phone
#. odoo-python
#: code:addons/base_phone/wizard/number_not_found.py:0
msgid "Select the Partner to Update."
msgstr "Wählen Sie den Partner der aktualisiert werden soll."

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
msgid ""
"Set how many digits must be identical from the end of the phone number to "
"declare it as a match with a partner, a lead, an employee, a candidate, etc."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__show_effect
msgid "Show Effect"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__state
msgid "State"
msgstr "Bundesland"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_gmail
msgid "Support Gmail Authentication"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_outlook
msgid "Support Outlook Authentication"
msgstr ""

#. module: base_phone
#: model:ir.ui.menu,name:base_phone.menu_config_phone
#: model_terms:ir.ui.view,arch_db:base_phone.res_config_settings_view_form
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony"
msgstr "Telefonie"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.view_users_form
msgid "Telephony Preferences"
msgstr "Telefonie Einstellungen"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__auth_signup_template_user_id
msgid "Template user for new users created through signup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid "Tenor API key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_gif_limit
msgid "Tenor Gif Limit"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "Tenor content filter"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__company_country_code
msgid ""
"The ISO country code in two chars. \n"
"You can use this field for quick search."
msgstr ""

#. module: base_phone
#: model:ir.model.constraint,message:base_phone.constraint_res_company_number_of_digits_to_match_from_end_positive
msgid ""
"The value of the field 'Number of Digits To Match From End' must be positive."
msgstr ""
"Der Wert des Feldes 'Anzahl der übereinstimmenden Stellen vom Ende her' muss "
"positiv sein"

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.reformat_all_phonenumbers_form
msgid ""
"This wizard reformats the phone and mobile numbers of all partners in "
"standard international format e.g. +33 1 41 98 12 42"
msgstr ""
"Dieser Assistent formatiert die Telefon-, Mobil- und Faxnummern aller "
"Partner im standard internationen Format - zB +33141981242 - neu"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_token
msgid "Twilio Account Auth Token"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__twilio_account_sid
msgid "Twilio Account SID"
msgstr ""

#. module: base_phone
#. odoo-javascript
#: code:addons/base_phone/static/src/components/on_dial_button/on_dial_button.esm.js:0
msgid "Unhook your ringing phone"
msgstr "Nimm das klingelde Telefon ab"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_web_unsplash
msgid "Unsplash Image Library"
msgstr ""

#. module: base_phone
#: model_terms:ir.ui.view,arch_db:base_phone.number_not_found_form
msgid "Update Existing Partner"
msgstr "Einen Partner anlegen oder aktualisieren"

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__external_email_server_default
msgid "Use Custom Email Servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__use_twilio_rtc_servers
msgid "Use Twilio ICE servers"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_auth_oauth
msgid "Use external authentication providers (OAuth)"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__restrict_template_rendering
msgid ""
"Users will still be able to render templates.\n"
"However only Mail Template Editors will be able to create new dynamic "
"templates or modify existing ones."
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_voip
msgid "VoIP"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__web_app_name
msgid "Web App Name"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_content_filter
msgid "https://developers.google.com/tenor/guides/content-filtering"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_recaptcha
msgid "reCAPTCHA"
msgstr ""

#~ msgid "Last Modified on"
#~ msgstr "Zuletzt geändert am"


================================================
FILE: base_phone/i18n/el_GR.po
================================================
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# 	* base_phone
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-05-01 07:17+0000\n"
"PO-Revision-Date: 2023-05-01 07:17+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__google_translate_api_key
msgid ""
"A valid Google API key is required to enable message translation. https://"
"cloud.google.com/translate/docs/setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__tenor_api_key
msgid ""
"Add a Tenor GIF API key to enable GIFs support. https://developers.google."
"com/tenor/guides/quickstart#setup"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__alias_domain_id
msgid "Alias Domain"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_mail_plugin
msgid "Allow integration with the mail plugins"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_google_calendar
msgid "Allow the users to synchronize their calendar  with Google Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_microsoft_calendar
msgid "Allow the users to synchronize their calendar with Outlook Calendar"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_reformat_all_phonenumbers__module_base_import
msgid "Allow users to import data from CSV/XLS/XLSX/ODS files"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__group_multi_currency
msgid "Allows to work in a multi currency environment"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,help:base_phone.field_reformat_all_phonenumbers__sfu_server_key
msgid "Base64 encoded key"
msgstr ""

#. module: base_phone
#: model:ir.model.fields,field_description:base_phone.field_number_not_found__calling_number
msgid "Call
Download .txt
gitextract_g2wxca02/

├── .copier-answers.yml
├── .editorconfig
├── .gitattributes
├── .github/
│   └── workflows/
│       ├── pre-commit.yml
│       ├── stale.yml
│       └── test.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .pylintrc
├── .pylintrc-mandatory
├── .ruff.toml
├── LICENSE
├── README.md
├── base_phone/
│   ├── README.rst
│   ├── __init__.py
│   ├── __manifest__.py
│   ├── i18n/
│   │   ├── am_ET.po
│   │   ├── ar_001.po
│   │   ├── base_phone.pot
│   │   ├── ca_ES.po
│   │   ├── cs_CZ.po
│   │   ├── de.po
│   │   ├── el_GR.po
│   │   ├── es.po
│   │   ├── es_AR.po
│   │   ├── es_CR.po
│   │   ├── es_EC.po
│   │   ├── es_ES.po
│   │   ├── es_MX.po
│   │   ├── es_VE.po
│   │   ├── et_EE.po
│   │   ├── fi.po
│   │   ├── fr.po
│   │   ├── gl_ES.po
│   │   ├── hr.po
│   │   ├── it.po
│   │   ├── lt.po
│   │   ├── nl.po
│   │   ├── nl_BE.po
│   │   ├── pl.po
│   │   ├── pt.po
│   │   ├── pt_BR.po
│   │   ├── pt_PT.po
│   │   ├── ro.po
│   │   ├── ru.po
│   │   ├── sl_SI.po
│   │   ├── th.po
│   │   ├── tr.po
│   │   └── vi_VN.po
│   ├── models/
│   │   ├── __init__.py
│   │   ├── ir_fields_converter.py
│   │   ├── phone_common.py
│   │   ├── phone_validation_mixin.py
│   │   ├── res_company.py
│   │   └── res_partner.py
│   ├── pyproject.toml
│   ├── readme/
│   │   ├── CONTRIBUTORS.md
│   │   └── DESCRIPTION.md
│   ├── requirements.txt
│   ├── security/
│   │   ├── ir.model.access.csv
│   │   └── phone_security.xml
│   ├── static/
│   │   ├── description/
│   │   │   └── index.html
│   │   └── src/
│   │       └── components/
│   │           ├── on_dial_button/
│   │           │   ├── on_dial_button.esm.js
│   │           │   └── on_dial_button.xml
│   │           └── phone_field/
│   │               ├── phone_field.esm.js
│   │               └── phone_field.xml
│   ├── tests/
│   │   ├── __init__.py
│   │   └── test_base_phone.py
│   ├── views/
│   │   └── res_users_view.xml
│   └── wizard/
│       ├── __init__.py
│       ├── number_not_found.py
│       ├── number_not_found_view.xml
│       ├── reformat_all_phonenumbers.py
│       ├── reformat_all_phonenumbers_view.xml
│       ├── res_config_settings.py
│       └── res_config_settings.xml
├── checklog-odoo.cfg
├── eslint.config.cjs
├── prettier.config.cjs
├── requirements.txt
├── setup/
│   └── _metapackage/
│       └── pyproject.toml
└── voip_oca/
    ├── README.rst
    ├── __init__.py
    ├── __manifest__.py
    ├── data/
    │   └── neutralize.sql
    ├── demo/
    │   └── demo_data.xml
    ├── i18n/
    │   ├── it.po
    │   └── voip_oca.pot
    ├── models/
    │   ├── __init__.py
    │   ├── ir_http.py
    │   ├── mail_activity.py
    │   ├── mail_activity_mixin.py
    │   ├── res_partner.py
    │   ├── res_users.py
    │   ├── voip_call.py
    │   └── voip_pbx.py
    ├── pyproject.toml
    ├── readme/
    │   ├── CONFIGURE.md
    │   ├── CONTEXT.md
    │   ├── CONTRIBUTORS.md
    │   ├── CREDITS.md
    │   ├── DESCRIPTION.md
    │   ├── ROADMAP.md
    │   └── USAGE.md
    ├── security/
    │   └── ir.model.access.csv
    ├── static/
    │   ├── description/
    │   │   └── index.html
    │   ├── lib/
    │   │   └── sip.js
    │   ├── src/
    │   │   ├── components/
    │   │   │   ├── activity_list/
    │   │   │   │   ├── activity_list.esm.js
    │   │   │   │   ├── activity_list.scss
    │   │   │   │   └── activity_list.xml
    │   │   │   ├── call/
    │   │   │   │   ├── call.esm.js
    │   │   │   │   └── call.xml
    │   │   │   ├── call_list/
    │   │   │   │   ├── call_list.esm.js
    │   │   │   │   ├── call_list.scss
    │   │   │   │   └── call_list.xml
    │   │   │   ├── numpad/
    │   │   │   │   ├── numpad.esm.js
    │   │   │   │   ├── numpad.scss
    │   │   │   │   └── numpad.xml
    │   │   │   ├── partner/
    │   │   │   │   ├── partner.esm.js
    │   │   │   │   └── partner.xml
    │   │   │   ├── partner_list/
    │   │   │   │   ├── partner_list.esm.js
    │   │   │   │   ├── partner_list.scss
    │   │   │   │   └── partner_list.xml
    │   │   │   ├── phone_field/
    │   │   │   │   ├── phone_field.esm.js
    │   │   │   │   └── phone_field.xml
    │   │   │   ├── softphone/
    │   │   │   │   ├── softphone.esm.js
    │   │   │   │   ├── softphone.scss
    │   │   │   │   └── softphone.xml
    │   │   │   ├── transfer/
    │   │   │   │   ├── transfer.esm.js
    │   │   │   │   └── transfer.xml
    │   │   │   └── voip_oca_systray/
    │   │   │       ├── voip_oca_systray.esm.js
    │   │   │       ├── voip_oca_systray.scss
    │   │   │       └── voip_oca_systray.xml
    │   │   ├── core/
    │   │   │   └── phone/
    │   │   │       ├── @types/
    │   │   │       │   └── model.d.ts
    │   │   │       └── call_model.esm.js
    │   │   ├── services/
    │   │   │   ├── voip_agent_service.esm.js
    │   │   │   └── voip_oca_service.esm.js
    │   │   └── utils/
    │   │       └── utils.esm.js
    │   └── tests/
    │       ├── components/
    │       │   ├── ActivityTab.esm.test.js
    │       │   ├── CallTab.esm.test.js
    │       │   ├── NumpadTab.esm.test.js
    │       │   ├── PartnerTab.esm.test.js
    │       │   └── Softphone.esm.test.js
    │       ├── mock_server/
    │       │   └── mock_models/
    │       │       ├── mail_activity.esm.js
    │       │       ├── res_partner.esm.js
    │       │       ├── voip_call.esm.js
    │       │       └── voip_pbx.esm.js
    │       └── voip_test_helpers.esm.js
    ├── tests/
    │   ├── __init__.py
    │   ├── test_backend.py
    │   ├── test_frontend.py
    │   └── test_js.py
    └── views/
        ├── menus.xml
        ├── res_users.xml
        ├── voip_call.xml
        └── voip_pbx.xml
Download .txt
SYMBOL INDEX (982 symbols across 41 files)

FILE: base_phone/models/ir_fields_converter.py
  class IrFieldsConverter (line 8) | class IrFieldsConverter(models.AbstractModel):
    method _str_to_phone (line 12) | def _str_to_phone(self, model, field, value):

FILE: base_phone/models/phone_common.py
  class PhoneCommon (line 17) | class PhoneCommon(models.AbstractModel):
    method get_name_from_phone_number (line 22) | def get_name_from_phone_number(self, presented_number):
    method get_record_from_phone_number (line 29) | def get_record_from_phone_number(self, presented_number):
    method _get_phone_models (line 103) | def _get_phone_models(self):
    method click2dial (line 132) | def click2dial(self, erp_number):
    method convert_to_dial_number (line 138) | def convert_to_dial_number(self, erp_number):

FILE: base_phone/models/phone_validation_mixin.py
  class PhoneValidationMixin (line 11) | class PhoneValidationMixin(models.AbstractModel):
    method _phone_validation_get_country (line 15) | def _phone_validation_get_country(self):
    method phone_format (line 22) | def phone_format(self, number, country=None, company=None):

FILE: base_phone/models/res_company.py
  class ResCompany (line 8) | class ResCompany(models.Model):

FILE: base_phone/models/res_partner.py
  class ResPartner (line 9) | class ResPartner(models.Model):
    method _compute_display_name (line 20) | def _compute_display_name(self):

FILE: base_phone/static/src/components/on_dial_button/on_dial_button.esm.js
  class OnDialButton (line 10) | class OnDialButton extends Component {
    method setup (line 13) | setup() {
    method onClick (line 18) | async onClick() {
    method click2dial (line 22) | click2dial(phone_num) {

FILE: base_phone/tests/test_base_phone.py
  class TestBasePhone (line 8) | class TestBasePhone(BaseCommon):
    method setUpClass (line 10) | def setUpClass(cls):
    method test_get_phone_model (line 23) | def test_get_phone_model(self):
    method test_lookup (line 31) | def test_lookup(self):
    method test_to_dial (line 40) | def test_to_dial(self):
    method test_partner_phone_formatting (line 46) | def test_partner_phone_formatting(self):

FILE: base_phone/wizard/number_not_found.py
  class NumberNotFound (line 18) | class NumberNotFound(models.TransientModel):
    method default_get (line 50) | def default_get(self, fields_list):
    method create_partner (line 80) | def create_partner(self):
    method update_partner (line 98) | def update_partner(self):

FILE: base_phone/wizard/reformat_all_phonenumbers.py
  class ReformatAllPhonenumbers (line 12) | class ReformatAllPhonenumbers(models.TransientModel):
    method run_reformat_all_phonenumbers (line 22) | def run_reformat_all_phonenumbers(self):

FILE: base_phone/wizard/res_config_settings.py
  class ResConfigSettings (line 8) | class ResConfigSettings(models.TransientModel):

FILE: voip_oca/models/ir_http.py
  class Http (line 8) | class Http(models.AbstractModel):
    method session_info (line 11) | def session_info(self):

FILE: voip_oca/models/mail_activity.py
  class VoipOcaActivity (line 8) | class VoipOcaActivity(models.Model):
    method _compute_main_partner_id (line 17) | def _compute_main_partner_id(self):
    method get_call_activities (line 28) | def get_call_activities(self, _search, offset, limit):

FILE: voip_oca/models/mail_activity_mixin.py
  class ResConfigSettings (line 7) | class ResConfigSettings(models.AbstractModel):
    method _compute_activity_main_partner_id (line 16) | def _compute_activity_main_partner_id(self):
    method get_activity_main_partner_id (line 20) | def get_activity_main_partner_id(self):

FILE: voip_oca/models/res_partner.py
  class VoipOcaCall (line 8) | class VoipOcaCall(models.Model):
    method format_partner (line 11) | def format_partner(self):
    method voip_get_contacts (line 23) | def voip_get_contacts(self, _search, offset, limit):
    method get_activity_main_partner_id (line 34) | def get_activity_main_partner_id(self):

FILE: voip_oca/models/res_users.py
  class ResUsers (line 7) | class ResUsers(models.Model):
    method SELF_READABLE_FIELDS (line 15) | def SELF_READABLE_FIELDS(self):
    method SELF_WRITEABLE_FIELDS (line 23) | def SELF_WRITEABLE_FIELDS(self):
    method _voip_get_info (line 30) | def _voip_get_info(self):

FILE: voip_oca/models/voip_call.py
  class VoipOcaCall (line 9) | class VoipOcaCall(models.Model):
    method _compute_display_name (line 45) | def _compute_display_name(self):
    method format_call (line 51) | def format_call(self):
    method get_recent_calls (line 66) | def get_recent_calls(self, _search, offset, limit):
    method create_call (line 86) | def create_call(self, values):
    method terminate_call (line 102) | def terminate_call(self):
    method reject_call (line 107) | def reject_call(self):
    method accept_call (line 112) | def accept_call(self):

FILE: voip_oca/models/voip_pbx.py
  class VoipOcaPbx (line 7) | class VoipOcaPbx(models.Model):

FILE: voip_oca/static/lib/sip.js
  class ContentTypeUnsupportedError (line 224) | class ContentTypeUnsupportedError extends _core_exceptions_exception_js_...
    method constructor (line 225) | constructor(message) {
  class Exception (line 244) | class Exception extends Error {
    method constructor (line 245) | constructor(message) {
  class RequestPendingError (line 266) | class RequestPendingError extends _core_exceptions_exception_js__WEBPACK...
    method constructor (line 268) | constructor(message) {
  class SessionDescriptionHandlerError (line 288) | class SessionDescriptionHandlerError extends _core_exceptions_exception_...
    method constructor (line 289) | constructor(message) {
  class SessionTerminatedError (line 309) | class SessionTerminatedError extends _core_exceptions_exception_js__WEBP...
    method constructor (line 310) | constructor() {
  class StateTransitionError (line 330) | class StateTransitionError extends _core_exceptions_exception_js__WEBPAC...
    method constructor (line 331) | constructor(message) {
  class Ack (line 349) | class Ack {
    method constructor (line 351) | constructor(incomingAckRequest) {
    method request (line 355) | get request() {
  class Bye (line 373) | class Bye {
    method constructor (line 375) | constructor(incomingByeRequest) {
    method request (line 379) | get request() {
    method accept (line 383) | accept(options) {
    method reject (line 388) | reject(options) {
  class Cancel (line 407) | class Cancel {
    method constructor (line 409) | constructor(incomingCancelRequest) {
    method request (line 413) | get request() {
  class EmitterImpl (line 431) | class EmitterImpl {
    method constructor (line 432) | constructor() {
    method addListener (line 442) | addListener(listener, options) {
    method emit (line 453) | emit(data) {
    method removeAllListeners (line 459) | removeAllListeners() {
    method removeListener (line 466) | removeListener(listener) {
    method on (line 474) | on(listener) {
    method off (line 482) | off(listener) {
    method once (line 490) | once(listener) {
  class Info (line 508) | class Info {
    method constructor (line 510) | constructor(incomingInfoRequest) {
    method request (line 514) | get request() {
    method accept (line 518) | accept(options) {
    method reject (line 523) | reject(options) {
  class Invitation (line 568) | class Invitation extends _session_js__WEBPACK_IMPORTED_MODULE_0__.Session {
    method constructor (line 570) | constructor(userAgent, incomingInviteRequest) {
    method dispose (line 652) | dispose() {
    method autoSendAnInitialProvisionalResponse (line 697) | get autoSendAnInitialProvisionalResponse() {
    method body (line 703) | get body() {
    method localIdentity (line 709) | get localIdentity() {
    method remoteIdentity (line 715) | get remoteIdentity() {
    method request (line 721) | get request() {
    method accept (line 737) | accept(options = {}) {
    method progress (line 787) | progress(options = {}) {
    method reject (line 861) | reject(options = {}) {
    method _onCancel (line 890) | _onCancel(message) {
    method handlePrackOfferAnswer (line 910) | handlePrackOfferAnswer(request) {
    method handleResponseError (line 957) | handleResponseError(error) {
    method onAckTimeout (line 1016) | onAckTimeout() {
    method sendAccept (line 1029) | sendAccept(options = {}) {
    method sendProgress (line 1061) | sendProgress(options = {}) {
    method sendProgressWithSDP (line 1089) | sendProgressWithSDP(options = {}) {
    method sendProgressReliable (line 1109) | sendProgressReliable(options = {}) {
    method sendProgressReliableWaitForPrack (line 1119) | sendProgressReliableWaitForPrack(options = {}) {
    method sendProgressTrying (line 1205) | sendProgressTrying() {
    method waitForArrivalOfPrack (line 1220) | waitForArrivalOfPrack() {
    method prackArrived (line 1234) | prackArrived() {
    method prackNeverArrived (line 1246) | prackNeverArrived() {
  class Session (line 1305) | class Session {
    method constructor (line 1311) | constructor(userAgent, options = {}) {
    method dispose (line 1325) | dispose() {
    method assertedIdentity (line 1372) | get assertedIdentity() {
    method dialog (line 1378) | get dialog() {
    method id (line 1384) | get id() {
    method replacee (line 1390) | get replacee() {
    method sessionDescriptionHandler (line 1404) | get sessionDescriptionHandler() {
    method sessionDescriptionHandlerFactory (line 1410) | get sessionDescriptionHandlerFactory() {
    method sessionDescriptionHandlerModifiers (line 1421) | get sessionDescriptionHandlerModifiers() {
    method sessionDescriptionHandlerModifiers (line 1424) | set sessionDescriptionHandlerModifiers(modifiers) {
    method sessionDescriptionHandlerOptions (line 1435) | get sessionDescriptionHandlerOptions() {
    method sessionDescriptionHandlerOptions (line 1438) | set sessionDescriptionHandlerOptions(options) {
    method sessionDescriptionHandlerModifiersReInvite (line 1449) | get sessionDescriptionHandlerModifiersReInvite() {
    method sessionDescriptionHandlerModifiersReInvite (line 1452) | set sessionDescriptionHandlerModifiersReInvite(modifiers) {
    method sessionDescriptionHandlerOptionsReInvite (line 1463) | get sessionDescriptionHandlerOptionsReInvite() {
    method sessionDescriptionHandlerOptionsReInvite (line 1466) | set sessionDescriptionHandlerOptionsReInvite(options) {
    method state (line 1472) | get state() {
    method stateChange (line 1478) | get stateChange() {
    method userAgent (line 1484) | get userAgent() {
    method bye (line 1491) | bye(options = {}) {
    method info (line 1547) | info(options = {}) {
    method invite (line 1562) | invite(options = {}) {
    method message (line 1746) | message(options = {}) {
    method refer (line 1762) | refer(referTo, options = {}) {
    method _bye (line 1794) | _bye(delegate, options) {
    method _info (line 1849) | _info(delegate, options) {
    method _message (line 1862) | _message(delegate, options) {
    method _refer (line 1876) | _refer(onNotify, delegate, options) {
    method ackAndBye (line 1897) | ackAndBye(response, statusCode, reasonPhrase) {
    method onAckRequest (line 1910) | onAckRequest(request) {
    method onByeRequest (line 1996) | onByeRequest(request) {
    method onInfoRequest (line 2015) | onInfoRequest(request) {
    method onInviteRequest (line 2041) | onInviteRequest(request) {
    method onMessageRequest (line 2121) | onMessageRequest(request) {
    method onNotifyRequest (line 2139) | onNotifyRequest(request) {
    method onPrackRequest (line 2166) | onPrackRequest(request) {
    method onReferRequest (line 2178) | onReferRequest(request) {
    method generateResponseOfferAnswer (line 2214) | generateResponseOfferAnswer(request, options) {
    method generateResponseOfferAnswerInDialog (line 2232) | generateResponseOfferAnswerInDialog(options) {
    method getOffer (line 2274) | getOffer(options) {
    method rollbackOffer (line 2303) | rollbackOffer() {
    method setAnswer (line 2330) | setAnswer(answer, options) {
    method setOfferAndGetAnswer (line 2367) | setOfferAndGetAnswer(offer, options) {
    method setSessionDescriptionHandler (line 2408) | setSessionDescriptionHandler(sdh) {
    method setupSessionDescriptionHandler (line 2418) | setupSessionDescriptionHandler() {
    method stateTransition (line 2433) | stateTransition(newState) {
    method copyRequestOptions (line 2479) | copyRequestOptions(requestOptions = {}) {
    method getReasonHeaderValue (line 2493) | getReasonHeaderValue(code, reason) {
    method referExtraHeaders (line 2501) | referExtraHeaders(referTo) {
    method referToString (line 2509) | referToString(target) {
  function contentTypeToContentDisposition (line 2609) | function contentTypeToContentDisposition(contentType) {
  function fromBodyLegacy (line 2622) | function fromBodyLegacy(bodyLegacy) {
  function isBody (line 2635) | function isBody(body) {
  function getBody (line 2649) | function getBody(message) {
  class IncomingRequestMessage (line 2736) | class IncomingRequestMessage extends _incoming_message_js__WEBPACK_IMPOR...
    method constructor (line 2737) | constructor() {
  class IncomingMessage (line 2759) | class IncomingMessage {
    method constructor (line 2760) | constructor() {
    method addHeader (line 2770) | addHeader(name, value) {
    method getHeader (line 2785) | getHeader(name) {
    method getHeaders (line 2801) | getHeaders(name) {
    method hasHeader (line 2818) | hasHeader(name) {
    method parseHeader (line 2829) | parseHeader(name, idx = 0) {
    method s (line 2867) | s(name, idx = 0) {
    method setHeader (line 2875) | setHeader(name, value) {
    method toString (line 2878) | toString() {
  function createRandomToken (line 2979) | function createRandomToken(size, base = 32) {
  function getReasonPhrase (line 2990) | function getReasonPhrase(code) {
  function newTag (line 2996) | function newTag() {
  function headerize (line 3003) | function headerize(str) {
  function utf8Length (line 3031) | function utf8Length(str) {
  function parse (line 3060) | function parse(input, startRule) {
  function nameAddrHeaderParse (line 3077) | function nameAddrHeaderParse(nameAddrHeader) {
  function URIParse (line 3088) | function URIParse(uri) {
  function peg$padEnd (line 3110) | function peg$padEnd(str, targetLength, padString) {
  class SyntaxError (line 3119) | class SyntaxError extends Error {
    method constructor (line 3120) | constructor(message, expected, found, location) {
    method buildMessage (line 3137) | static buildMessage(expected, found) {
    method format (line 3214) | format(sources) {
  function peg$parse (line 3243) | function peg$parse(input, options) {
  class URI (line 4646) | class URI extends _parameters_js__WEBPACK_IMPORTED_MODULE_0__.Parameters {
    method constructor (line 4656) | constructor(scheme = "sip", user, host, port, parameters, headers) {
    method scheme (line 4684) | get scheme() { return this.normal.scheme; }
    method scheme (line 4685) | set scheme(value) {
    method user (line 4689) | get user() { return this.normal.user; }
    method user (line 4690) | set user(value) {
    method host (line 4693) | get host() { return this.normal.host; }
    method host (line 4694) | set host(value) {
    method aor (line 4698) | get aor() { return this.normal.user + "@" + this.normal.host; }
    method port (line 4699) | get port() { return this.normal.port; }
    method port (line 4700) | set port(value) {
    method setHeader (line 4703) | setHeader(name, value) {
    method getHeader (line 4706) | getHeader(name) {
    method hasHeader (line 4711) | hasHeader(name) {
    method deleteHeader (line 4715) | deleteHeader(header) {
    method clearHeaders (line 4724) | clearHeaders() {
    method clone (line 4727) | clone() {
    method toRaw (line 4730) | toRaw() {
    method toString (line 4733) | toString() {
    method _normal (line 4736) | get _normal() { return this.normal; }
    method _raw (line 4737) | get _raw() { return this.raw; }
    method _toString (line 4738) | _toString(uri) {
    method escapeUser (line 4783) | escapeUser(user) {
    method headerize (line 4805) | headerize(str) {
  function equivalentURI (line 4842) | function equivalentURI(a, b) {
  class Parameters (line 4955) | class Parameters {
    method constructor (line 4956) | constructor(parameters) {
    method setParam (line 4966) | setParam(key, value) {
    method getParam (line 4971) | getParam(key) {
    method hasParam (line 4976) | hasParam(key) {
    method deleteParam (line 4979) | deleteParam(key) {
    method clearParams (line 4987) | clearParams() {
  class NameAddrHeader (line 5007) | class NameAddrHeader extends _parameters_js__WEBPACK_IMPORTED_MODULE_0__...
    method constructor (line 5014) | constructor(uri, displayName, parameters) {
    method friendlyName (line 5019) | get friendlyName() {
    method displayName (line 5022) | get displayName() { return this._displayName; }
    method displayName (line 5023) | set displayName(value) {
    method clone (line 5026) | clone() {
    method toString (line 5029) | toString() {
  class IncomingResponseMessage (line 5060) | class IncomingResponseMessage extends _incoming_message_js__WEBPACK_IMPO...
    method constructor (line 5061) | constructor() {
  class OutgoingRequestMessage (line 5083) | class OutgoingRequestMessage {
    method constructor (line 5084) | constructor(method, ruri, fromURI, toURI, options, extraHeaders, body) {
    method getDefaultOptions (line 5143) | static getDefaultOptions() {
    method makeNameAddrHeader (line 5160) | static makeNameAddrHeader(uri, displayName, tag) {
    method getHeader (line 5172) | getHeader(name) {
    method getHeaders (line 5194) | getHeaders(name) {
    method hasHeader (line 5217) | hasHeader(name) {
    method setHeader (line 5236) | setHeader(name, value) {
    method setViaHeader (line 5256) | setViaHeader(branch, transport) {
    method toString (line 5269) | toString() {
  class Message (line 5432) | class Message {
    method constructor (line 5434) | constructor(incomingMessageRequest) {
    method request (line 5438) | get request() {
    method accept (line 5442) | accept(options) {
    method reject (line 5447) | reject(options) {
  class Notification (line 5466) | class Notification {
    method constructor (line 5468) | constructor(incomingNotifyRequest) {
    method request (line 5472) | get request() {
    method accept (line 5476) | accept(options) {
    method reject (line 5481) | reject(options) {
  class Referral (line 5502) | class Referral {
    method constructor (line 5504) | constructor(incomingReferRequest, session) {
    method referTo (line 5508) | get referTo() {
    method referredBy (line 5515) | get referredBy() {
    method replaces (line 5518) | get replaces() {
    method request (line 5526) | get request() {
    method accept (line 5530) | accept(options = { statusCode: 202 }) {
    method reject (line 5535) | reject(options) {
    method makeInviter (line 5552) | makeInviter(options) {
  class TransactionStateError (line 5654) | class TransactionStateError extends _exception_js__WEBPACK_IMPORTED_MODU...
    method constructor (line 5655) | constructor(message) {
  class Inviter (line 5720) | class Inviter extends _session_js__WEBPACK_IMPORTED_MODULE_0__.Session {
    method constructor (line 5727) | constructor(userAgent, targetURI, options = {}) {
    method dispose (line 5834) | dispose() {
    method body (line 5865) | get body() {
    method localIdentity (line 5871) | get localIdentity() {
    method remoteIdentity (line 5877) | get remoteIdentity() {
    method request (line 5883) | get request() {
    method cancel (line 5900) | cancel(options = {}) {
    method invite (line 6021) | invite(options = {}) {
    method sendInvite (line 6105) | sendInvite(options = {}) {
    method disposeEarlyMedia (line 6333) | disposeEarlyMedia() {
    method notifyReferer (line 6339) | notifyReferer(response) {
    method onAccept (line 6386) | onAccept(inviteResponse) {
    method onProgress (line 6525) | onProgress(inviteResponse) {
    method onRedirect (line 6653) | onRedirect(inviteResponse) {
    method onReject (line 6668) | onReject(inviteResponse) {
    method onTrying (line 6683) | onTrying(inviteResponse) {
  class Messager (line 6710) | class Messager {
    method constructor (line 6719) | constructor(userAgent, targetURI, content, contentType = "text/plain",...
    method message (line 6759) | message(options = {}) {
  class Publisher (line 6818) | class Publisher {
    method constructor (line 6827) | constructor(userAgent, targetURI, eventType, options = {}) {
    method dispose (line 6875) | dispose() {
    method state (line 6897) | get state() {
    method stateChange (line 6901) | get stateChange() {
    method publish (line 6909) | publish(content, options = {}) {
    method unpublish (line 6933) | unpublish(options = {}) {
    method receiveResponse (line 6947) | receiveResponse(response) {
    method send (line 7045) | send() {
    method refreshRequest (line 7054) | refreshRequest() {
    method sendPublishRequest (line 7070) | sendPublishRequest() {
    method stateTransition (line 7100) | stateTransition(newState) {
  class Registerer (line 7197) | class Registerer {
    method constructor (line 7203) | constructor(userAgent, options = {}) {
    method defaultOptions (line 7284) | static defaultOptions() {
    method stripUndefinedProperties (line 7303) | static stripUndefinedProperties(options) {
    method contacts (line 7314) | get contacts() {
    method retryAfter (line 7350) | get retryAfter() {
    method state (line 7354) | get state() {
    method stateChange (line 7358) | get stateChange() {
    method dispose (line 7362) | dispose() {
    method register (line 7404) | register(options = {}) {
    method unregister (line 7612) | unregister(options = {}) {
    method clearTimers (line 7717) | clearTimers() {
    method generateContactHeader (line 7730) | generateContactHeader(expires) {
    method registered (line 7747) | registered(expires) {
    method unregistered (line 7767) | unregistered() {
    method terminated (line 7776) | terminated() {
    method stateTransition (line 7785) | stateTransition(newState) {
    method waiting (line 7824) | get waiting() {
    method waitingChange (line 7828) | get waitingChange() {
    method waitingToggle (line 7834) | waitingToggle(waiting) {
    method waitingWarning (line 7843) | waitingWarning() {
    method stateError (line 7853) | stateError() {
  class Subscriber (line 7927) | class Subscriber extends _subscription_js__WEBPACK_IMPORTED_MODULE_0__.S...
    method constructor (line 7935) | constructor(userAgent, targetURI, eventType, options = {}) {
    method dispose (line 7973) | dispose() {
    method subscribe (line 8019) | subscribe(options = {}) {
    method unsubscribe (line 8076) | unsubscribe(options = {}) {
    method _refresh (line 8110) | _refresh() {
    method onAccepted (line 8118) | onAccepted(response) {
    method onNotify (line 8124) | onNotify(request) {
    method onRefresh (line 8194) | onRefresh(request) {
    method initSubscriberRequest (line 8199) | initSubscriberRequest() {
  class SubscriberRequest (line 8212) | class SubscriberRequest {
    method constructor (line 8213) | constructor(core, target, event, expires, options, delegate) {
    method dispose (line 8231) | dispose() {
    method state (line 8239) | get state() {
    method subscribe (line 8254) | subscribe() {
  class Subscription (line 8333) | class Subscription {
    method constructor (line 8339) | constructor(userAgent, options = {}) {
    method dispose (line 8350) | dispose() {
    method dialog (line 8361) | get dialog() {
    method disposed (line 8368) | get disposed() {
    method state (line 8374) | get state() {
    method stateChange (line 8380) | get stateChange() {
    method stateTransition (line 8384) | stateTransition(newState) {
  class UserAgent (line 8613) | class UserAgent {
    method constructor (line 8618) | constructor(options = {}) {
    method makeURI (line 8752) | static makeURI(uri) {
    method defaultOptions (line 8756) | static defaultOptions() {
    method newUUID (line 8798) | static newUUID() {
    method stripUndefinedProperties (line 8812) | static stripUndefinedProperties(options) {
    method configuration (line 8825) | get configuration() {
    method contact (line 8831) | get contact() {
    method instanceId (line 8837) | get instanceId() {
    method state (line 8843) | get state() {
    method stateChange (line 8849) | get stateChange() {
    method transport (line 8855) | get transport() {
    method userAgentCore (line 8861) | get userAgentCore() {
    method getLogger (line 8867) | getLogger(category, label) {
    method getLoggerFactory (line 8873) | getLoggerFactory() {
    method isConnected (line 8879) | isConnected() {
    method reconnect (line 8885) | reconnect() {
    method start (line 8910) | start() {
    method stop (line 8951) | async stop() {
    method _makeInviter (line 9055) | _makeInviter(targetURI, options) {
    method attemptReconnection (line 9062) | attemptReconnection(reconnectionAttempt = 1) {
    method initContact (line 9085) | initContact() {
    method initCore (line 9129) | initCore() {
    method initTransportCallbacks (line 9342) | initTransportCallbacks() {
    method onTransportConnect (line 9347) | onTransportConnect() {
    method onTransportDisconnect (line 9355) | onTransportDisconnect(error) {
    method onTransportMessage (line 9367) | onTransportMessage(messageString) {
    method transitionState (line 9462) | transitionState(newState, error) {
  class LoggerFactory (line 9505) | class LoggerFactory {
    method constructor (line 9506) | constructor() {
    method level (line 9513) | get level() {
    method level (line 9516) | set level(newLevel) {
    method connector (line 9532) | get connector() {
    method connector (line 9535) | set connector(value) {
    method getLogger (line 9546) | getLogger(category, label) {
    method genericLog (line 9560) | genericLog(levelToLog, category, label, content) {
    method print (line 9571) | print(levelToLog, category, label, content) {
  class Logger (line 9639) | class Logger {
    method constructor (line 9640) | constructor(logger, category, label) {
    method error (line 9645) | error(content) {
    method warn (line 9648) | warn(content) {
    method log (line 9651) | log(content) {
    method debug (line 9654) | debug(content) {
    method genericLog (line 9657) | genericLog(level, content) {
    method level (line 9660) | get level() {
    method level (line 9663) | set level(newLevel) {
  function defaultSessionDescriptionHandlerFactory (line 9691) | function defaultSessionDescriptionHandlerFactory(mediaStreamFactory) {
  function defaultMediaStreamFactory (line 9722) | function defaultMediaStreamFactory() {
  function defaultPeerConnectionConfiguration (line 9752) | function defaultPeerConnectionConfiguration() {
  class SessionDescriptionHandler (line 9781) | class SessionDescriptionHandler {
    method constructor (line 9788) | constructor(logger, mediaStreamFactory, sessionDescriptionHandlerConfi...
    method localMediaStream (line 9811) | get localMediaStream() {
    method remoteMediaStream (line 9827) | get remoteMediaStream() {
    method dataChannel (line 9833) | get dataChannel() {
    method peerConnection (line 9865) | get peerConnection() {
    method peerConnectionDelegate (line 9894) | get peerConnectionDelegate() {
    method peerConnectionDelegate (line 9897) | set peerConnectionDelegate(delegate) {
    method dispatchAddTrackEvent (line 9902) | static dispatchAddTrackEvent(stream, track) {
    method dispatchRemoveTrackEvent (line 9907) | static dispatchRemoveTrackEvent(stream, track) {
    method close (line 9913) | close() {
    method enableReceiverTracks (line 9934) | enableReceiverTracks(enable) {
    method enableSenderTracks (line 9949) | enableSenderTracks(enable) {
    method getDescription (line 9965) | getDescription(options, modifiers) {
    method hasDescription (line 10002) | hasDescription(contentType) {
    method iceGatheringComplete (line 10014) | iceGatheringComplete() {
    method sendDtmf (line 10037) | sendDtmf(tones, options) {
    method setDescription (line 10071) | setDescription(sdp, options, modifiers) {
    method applyModifiers (line 10093) | applyModifiers(sdp, modifiers) {
    method createDataChannel (line 10116) | createDataChannel(options) {
    method createLocalOfferOrAnswer (line 10156) | createLocalOfferOrAnswer(options) {
    method getLocalMediaStream (line 10181) | getLocalMediaStream(options) {
    method setLocalMediaStream (line 10216) | setLocalMediaStream(stream) {
    method getLocalSessionDescription (line 10285) | getLocalSessionDescription() {
    method setLocalSessionDescription (line 10300) | setLocalSessionDescription(sessionDescription) {
    method setRemoteSessionDescription (line 10311) | setRemoteSessionDescription(sessionDescription) {
    method setRemoteTrack (line 10348) | setRemoteTrack(track) {
    method updateDirection (line 10379) | updateDirection(options) {
    method waitForIceGatheringComplete (line 10547) | waitForIceGatheringComplete(restart = false, timeout = 0) {
    method initPeerConnectionEventHandlers (line 10581) | initPeerConnectionEventHandlers() {
  class Transport (line 10687) | class Transport {
    method constructor (line 10688) | constructor(logger, options) {
    method dispose (line 10736) | dispose() {
    method protocol (line 10746) | get protocol() {
    method server (line 10752) | get server() {
    method state (line 10758) | get state() {
    method stateChange (line 10764) | get stateChange() {
    method ws (line 10770) | get ws() {
    method connect (line 10777) | connect() {
    method disconnect (line 10784) | disconnect() {
    method isConnected (line 10792) | isConnected() {
    method send (line 10800) | send(message) {
    method _connect (line 10817) | _connect() {
    method _disconnect (line 10907) | _disconnect() {
    method _send (line 10983) | _send(message) {
    method onWebSocketClose (line 11010) | onWebSocketClose(ev, ws) {
    method onWebSocketError (line 11029) | onWebSocketError(ev, ws) {
    method onWebSocketMessage (line 11039) | onWebSocketMessage(ev, ws) {
    method onWebSocketOpen (line 11101) | onWebSocketOpen(ev, ws) {
    method transitionLoopDetectedError (line 11114) | transitionLoopDetectedError(state) {
    method transitionState (line 11125) | transitionState(newState, error) {
    method clearKeepAliveTimeout (line 11271) | clearKeepAliveTimeout() {
    method sendKeepAlive (line 11280) | sendKeepAlive() {
    method startSendingKeepAlives (line 11293) | startSendingKeepAlives() {
    method stopSendingKeepAlives (line 11309) | stopSendingKeepAlives() {
  function MD5 (line 11341) | function MD5(s) {
  class DigestAuthentication (line 11348) | class DigestAuthentication {
    method constructor (line 11355) | constructor(loggerFactory, ha1, username, password) {
    method authenticate (line 11371) | authenticate(request, challenge, body) {
    method toString (line 11430) | toString() {
    method updateNcHex (line 11454) | updateNcHex() {
    method calculateResponse (line 11461) | calculateResponse(body) {
  class Md5 (line 11554) | class Md5 {
    method constructor (line 11555) | constructor() {
    method hashStr (line 11564) | static hashStr(str, raw = false) {
    method hashAsciiStr (line 11570) | static hashAsciiStr(str, raw = false) {
    method _hex (line 11576) | static _hex(x) {
    method _md5cycle (line 11595) | static _md5cycle(x, k) {
    method start (line 11737) | start() {
    method appendStr (line 11746) | appendStr(str) {
    method appendAsciiStr (line 11786) | appendAsciiStr(str) {
    method appendByteArray (line 11807) | appendByteArray(input) {
    method getState (line 11828) | getState() {
    method setState (line 11838) | setState(state) {
    method end (line 11853) | end(raw = false) {
  class UserAgentCore (line 11968) | class UserAgentCore {
    method constructor (line 11974) | constructor(configuration, delegate = {}) {
    method dispose (line 11986) | dispose() {
    method reset (line 11990) | reset() {
    method loggerFactory (line 12001) | get loggerFactory() {
    method transport (line 12005) | get transport() {
    method invite (line 12017) | invite(request, delegate) {
    method message (line 12025) | message(request, delegate) {
    method publish (line 12033) | publish(request, delegate) {
    method register (line 12041) | register(request, delegate) {
    method subscribe (line 12049) | subscribe(request, delegate) {
    method request (line 12057) | request(request, delegate) {
    method makeOutgoingRequestMessage (line 12070) | makeOutgoingRequestMessage(method, requestURI, fromURI, toURI, options...
    method receiveIncomingRequestFromTransport (line 12104) | receiveIncomingRequestFromTransport(message) {
    method receiveIncomingResponseFromTransport (line 12111) | receiveIncomingResponseFromTransport(message) {
    method replyStateless (line 12130) | replyStateless(message, options) {
    method receiveRequestFromTransport (line 12160) | receiveRequestFromTransport(message) {
    method receiveRequest (line 12285) | receiveRequest(message) {
    method receiveInsideDialogRequest (line 12421) | receiveInsideDialogRequest(message) {
    method receiveOutsideDialogRequest (line 12554) | receiveOutsideDialogRequest(message) {
    method receiveResponseFromTransport (line 12671) | receiveResponseFromTransport(message) {
  class InviteUserAgentClient (line 12756) | class InviteUserAgentClient extends _user_agent_client_js__WEBPACK_IMPOR...
    method constructor (line 12757) | constructor(core, message, delegate) {
    method dispose (line 12764) | dispose() {
    method onTransportError (line 12783) | onTransportError(error) {
    method receiveResponse (line 12797) | receiveResponse(message) {
  class UserAgentClient (line 13135) | class UserAgentClient {
    method constructor (line 13136) | constructor(transactionConstructor, core, message, delegate) {
    method dispose (line 13146) | dispose() {
    method loggerFactory (line 13149) | get loggerFactory() {
    method transaction (line 13153) | get transaction() {
    method cancel (line 13166) | cancel(reason, options = {}) {
    method authenticationGuard (line 13248) | authenticationGuard(message, dialog) {
    method onRequestTimeout (line 13327) | onRequestTimeout() {
    method onTransportError (line 13348) | onTransportError(error) {
    method receiveResponse (line 13360) | receiveResponse(message) {
    method init (line 13398) | init() {
  class NonInviteClientTransaction (line 13476) | class NonInviteClientTransaction extends _client_transaction_js__WEBPACK...
    method constructor (line 13488) | constructor(request, transport, user) {
    method dispose (line 13505) | dispose() {
    method kind (line 13517) | get kind() {
    method receiveResponse (line 13524) | receiveResponse(response) {
    method onTransportError (line 13606) | onTransportError(error) {
    method typeToString (line 13613) | typeToString() {
    method stateTransition (line 13620) | stateTransition(newState, dueToTransportError = false) {
    method timerF (line 13680) | timerF() {
    method timerK (line 13692) | timerK() {
  class ClientTransaction (line 13725) | class ClientTransaction extends _transaction_js__WEBPACK_IMPORTED_MODULE...
    method constructor (line 13726) | constructor(_request, transport, user, state, loggerCategory) {
    method makeId (line 13738) | static makeId(request) {
    method request (line 13750) | get request() {
    method onRequestTimeout (line 13763) | onRequestTimeout() {
  class Transaction (line 13796) | class Transaction {
    method constructor (line 13797) | constructor(_transport, _user, _id, _state, loggerCategory) {
    method dispose (line 13816) | dispose() {
    method id (line 13820) | get id() {
    method kind (line 13824) | get kind() {
    method state (line 13828) | get state() {
    method transport (line 13832) | get transport() {
    method addStateChangeListener (line 13842) | addStateChangeListener(listener, options) {
    method notifyStateChangeListeners (line 13853) | notifyStateChangeListeners() {
    method removeStateChangeListener (line 13860) | removeStateChangeListener(listener) {
    method logTransportError (line 13863) | logTransportError(error, message) {
    method send (line 13874) | send(message) {
    method setState (line 13894) | setState(state) {
    method typeToString (line 13902) | typeToString() {
  class TransportError (line 13922) | class TransportError extends _exception_js__WEBPACK_IMPORTED_MODULE_0__....
    method constructor (line 13923) | constructor(message) {
  class InviteClientTransaction (line 13952) | class InviteClientTransaction extends _client_transaction_js__WEBPACK_IM...
    method constructor (line 13964) | constructor(request, transport, user) {
    method dispose (line 13993) | dispose() {
    method kind (line 14009) | get kind() {
    method ackResponse (line 14029) | ackResponse(ack) {
    method receiveResponse (line 14045) | receiveResponse(response) {
    method onTransportError (line 14224) | onTransportError(error) {
    method typeToString (line 14231) | typeToString() {
    method ack (line 14234) | ack(response) {
    method stateTransition (line 14290) | stateTransition(newState, dueToTransportError = false) {
    method timerA (line 14368) | timerA() {
    method timerB (line 14377) | timerB() {
    method timerD (line 14389) | timerD() {
    method timerM (line 14400) | timerM() {
  class Dialog (line 14433) | class Dialog {
    method constructor (line 14439) | constructor(core, dialogState) {
    method initialDialogStateForUserAgentClient (line 14452) | static initialDialogStateForUserAgentClient(outgoingRequestMessage, in...
    method initialDialogStateForUserAgentServer (line 14559) | static initialDialogStateForUserAgentServer(incomingRequestMessage, to...
    method dispose (line 14624) | dispose() {
    method id (line 14636) | get id() {
    method early (line 14653) | get early() {
    method callId (line 14657) | get callId() {
    method localTag (line 14661) | get localTag() {
    method remoteTag (line 14665) | get remoteTag() {
    method localSequenceNumber (line 14669) | get localSequenceNumber() {
    method remoteSequenceNumber (line 14673) | get remoteSequenceNumber() {
    method localURI (line 14677) | get localURI() {
    method remoteURI (line 14681) | get remoteURI() {
    method remoteTarget (line 14685) | get remoteTarget() {
    method routeSet (line 14692) | get routeSet() {
    method secure (line 14699) | get secure() {
    method userAgentCore (line 14703) | get userAgentCore() {
    method confirm (line 14707) | confirm() {
    method receiveRequest (line 14722) | receiveRequest(message) {
    method recomputeRouteSet (line 14787) | recomputeRouteSet(message) {
    method createOutgoingRequestMessage (line 14796) | createOutgoingRequestMessage(method, options) {
    method incrementLocalSequenceNumber (line 14902) | incrementLocalSequenceNumber() {
    method sequenceGuard (line 14918) | sequenceGuard(message) {
  class SessionDialog (line 15019) | class SessionDialog extends _dialog_js__WEBPACK_IMPORTED_MODULE_0__.Dial...
    method constructor (line 15020) | constructor(initialTransaction, core, state, delegate) {
    method dispose (line 15044) | dispose() {
    method sessionState (line 15062) | get sessionState() {
    method signalingState (line 15077) | get signalingState() {
    method offer (line 15081) | get offer() {
    method answer (line 15085) | get answer() {
    method confirm (line 15089) | confirm() {
    method reConfirm (line 15098) | reConfirm() {
    method ack (line 15120) | ack(options = {}) {
    method bye (line 15184) | bye(delegate, options) {
    method info (line 15231) | info(delegate, options) {
    method invite (line 15260) | invite(delegate, options) {
    method message (line 15299) | message(delegate, options) {
    method notify (line 15314) | notify(delegate, options) {
    method prack (line 15332) | prack(delegate, options) {
    method refer (line 15342) | refer(delegate, options) {
    method receiveRequest (line 15359) | receiveRequest(message) {
    method reliableSequenceGuard (line 15625) | reliableSequenceGuard(message) {
    method signalingStateRollback (line 15672) | signalingStateRollback() {
    method signalingStateTransition (line 15686) | signalingStateTransition(message) {
    method start2xxRetransmissionTimer (line 15794) | start2xxRetransmissionTimer() {
    method startReInvite2xxRetransmissionTimer (line 15845) | startReInvite2xxRetransmissionTimer() {
  class InviteServerTransaction (line 15915) | class InviteServerTransaction extends _server_transaction_js__WEBPACK_IM...
    method constructor (line 15926) | constructor(request, transport, user) {
    method dispose (line 15932) | dispose() {
    method kind (line 15949) | get kind() {
    method receiveRequest (line 15956) | receiveRequest(request) {
    method receiveResponse (line 16029) | receiveResponse(statusCode, response) {
    method retransmitAcceptedResponse (line 16109) | retransmitAcceptedResponse() {
    method onTransportError (line 16122) | onTransportError(error) {
    method typeToString (line 16128) | typeToString() {
    method stateTransition (line 16135) | stateTransition(newState) {
    method startProgressExtensionTimer (line 16205) | startProgressExtensionTimer() {
    method stopProgressExtensionTimer (line 16223) | stopProgressExtensionTimer() {
    method timerG (line 16241) | timerG() {
    method timerH (line 16250) | timerH() {
    method timerI (line 16261) | timerI() {
    method timerL (line 16274) | timerL() {
  class ServerTransaction (line 16304) | class ServerTransaction extends _transaction_js__WEBPACK_IMPORTED_MODULE...
    method constructor (line 16305) | constructor(_request, transport, user, state, loggerCategory) {
    method request (line 16311) | get request() {
  class ByeUserAgentClient (line 16335) | class ByeUserAgentClient extends _user_agent_client_js__WEBPACK_IMPORTED...
    method constructor (line 16336) | constructor(dialog, delegate, options) {
  class InfoUserAgentClient (line 16362) | class InfoUserAgentClient extends _user_agent_client_js__WEBPACK_IMPORTE...
    method constructor (line 16363) | constructor(dialog, delegate, options) {
  class ReInviteUserAgentClient (line 16393) | class ReInviteUserAgentClient extends _user_agent_client_js__WEBPACK_IMP...
    method constructor (line 16394) | constructor(dialog, delegate, options) {
    method receiveResponse (line 16403) | receiveResponse(message) {
  class MessageUserAgentClient (line 16507) | class MessageUserAgentClient extends _user_agent_client_js__WEBPACK_IMPO...
    method constructor (line 16508) | constructor(core, message, delegate) {
  class NotifyUserAgentClient (line 16532) | class NotifyUserAgentClient extends _user_agent_client_js__WEBPACK_IMPOR...
    method constructor (line 16533) | constructor(dialog, delegate, options) {
  class PrackUserAgentClient (line 16558) | class PrackUserAgentClient extends _user_agent_client_js__WEBPACK_IMPORT...
    method constructor (line 16559) | constructor(dialog, delegate, options) {
  class ReferUserAgentClient (line 16585) | class ReferUserAgentClient extends _user_agent_client_js__WEBPACK_IMPORT...
    method constructor (line 16586) | constructor(dialog, delegate, options) {
  class ByeUserAgentServer (line 16609) | class ByeUserAgentServer extends _user_agent_server_js__WEBPACK_IMPORTED...
    method constructor (line 16610) | constructor(dialog, message, delegate) {
  class UserAgentServer (line 16650) | class UserAgentServer {
    method constructor (line 16651) | constructor(transactionConstructor, core, message, delegate) {
    method dispose (line 16660) | dispose() {
    method loggerFactory (line 16663) | get loggerFactory() {
    method transaction (line 16667) | get transaction() {
    method accept (line 16673) | accept(options = { statusCode: 200 }) {
    method progress (line 16684) | progress(options = { statusCode: 180 }) {
    method redirect (line 16695) | redirect(contacts, options = { statusCode: 302 }) {
    method reject (line 16709) | reject(options = { statusCode: 480 }) {
    method trying (line 16721) | trying(options) {
    method receiveCancel (line 16746) | receiveCancel(message) {
    method acceptable (line 16756) | get acceptable() {
    method progressable (line 16765) | get progressable() {
    method redirectable (line 16774) | get redirectable() {
    method rejectable (line 16783) | get rejectable() {
    method tryingable (line 16792) | get tryingable() {
    method reply (line 16814) | reply(options) {
    method init (line 16824) | init() {
  class NonInviteServerTransaction (line 16876) | class NonInviteServerTransaction extends _server_transaction_js__WEBPACK...
    method constructor (line 16886) | constructor(request, transport, user) {
    method dispose (line 16892) | dispose() {
    method kind (line 16900) | get kind() {
    method receiveRequest (line 16908) | receiveRequest(request) {
    method receiveResponse (line 16948) | receiveResponse(statusCode, response) {
    method onTransportError (line 17021) | onTransportError(error) {
    method typeToString (line 17028) | typeToString() {
    method stateTransition (line 17031) | stateTransition(newState, dueToTransportError = false) {
    method timerJ (line 17078) | timerJ() {
  function constructOutgoingResponse (line 17105) | function constructOutgoingResponse(message, options) {
  class InfoUserAgentServer (line 17240) | class InfoUserAgentServer extends _user_agent_server_js__WEBPACK_IMPORTE...
    method constructor (line 17241) | constructor(dialog, message, delegate) {
  class ReInviteUserAgentServer (line 17268) | class ReInviteUserAgentServer extends _user_agent_server_js__WEBPACK_IMP...
    method constructor (line 17269) | constructor(dialog, message, delegate) {
    method accept (line 17278) | accept(options = { statusCode: 200 }) {
    method progress (line 17307) | progress(options = { statusCode: 180 }) {
    method redirect (line 17324) | redirect(contacts, options = { statusCode: 302 }) {
    method reject (line 17337) | reject(options = { statusCode: 488 }) {
  class MessageUserAgentServer (line 17361) | class MessageUserAgentServer extends _user_agent_server_js__WEBPACK_IMPO...
    method constructor (line 17362) | constructor(core, message, delegate) {
  function instanceOfDialog (line 17381) | function instanceOfDialog(object) {
  class NotifyUserAgentServer (line 17388) | class NotifyUserAgentServer extends _user_agent_server_js__WEBPACK_IMPOR...
    method constructor (line 17394) | constructor(dialogOrCore, message, delegate) {
  class PrackUserAgentServer (line 17417) | class PrackUserAgentServer extends _user_agent_server_js__WEBPACK_IMPORT...
    method constructor (line 17418) | constructor(dialog, message, delegate) {
    method accept (line 17428) | accept(options = { statusCode: 200 }) {
  function instanceOfSessionDialog (line 17451) | function instanceOfSessionDialog(object) {
  class ReferUserAgentServer (line 17458) | class ReferUserAgentServer extends _user_agent_server_js__WEBPACK_IMPORT...
    method constructor (line 17464) | constructor(dialogOrCore, message, delegate) {
  class PublishUserAgentClient (line 17487) | class PublishUserAgentClient extends _user_agent_client_js__WEBPACK_IMPO...
    method constructor (line 17488) | constructor(core, message, delegate) {
  class RegisterUserAgentClient (line 17510) | class RegisterUserAgentClient extends _user_agent_client_js__WEBPACK_IMP...
    method constructor (line 17511) | constructor(core, message, delegate) {
  class SubscribeUserAgentClient (line 17545) | class SubscribeUserAgentClient extends _user_agent_client_js__WEBPACK_IM...
    method constructor (line 17546) | constructor(core, message, delegate) {
    method dispose (line 17576) | dispose() {
    method onNotify (line 17584) | onNotify(uas) {
    method waitNotifyStart (line 17728) | waitNotifyStart() {
    method waitNotifyStop (line 17736) | waitNotifyStop() {
    method receiveResponse (line 17749) | receiveResponse(message) {
    method timerN (line 17809) | timerN() {
  class SubscriptionDialog (line 17870) | class SubscriptionDialog extends _dialog_js__WEBPACK_IMPORTED_MODULE_0__...
    method constructor (line 17871) | constructor(subscriptionEvent, subscriptionExpires, subscriptionState,...
    method initialDialogStateForSubscription (line 17893) | static initialDialogStateForSubscription(outgoingSubscribeRequestMessa...
    method dispose (line 17982) | dispose() {
    method autoRefresh (line 17991) | get autoRefresh() {
    method autoRefresh (line 17994) | set autoRefresh(autoRefresh) {
    method subscriptionEvent (line 17998) | get subscriptionEvent() {
    method subscriptionExpires (line 18002) | get subscriptionExpires() {
    method subscriptionExpires (line 18007) | set subscriptionExpires(expires) {
    method subscriptionExpiresInitial (line 18020) | get subscriptionExpiresInitial() {
    method subscriptionRefresh (line 18024) | get subscriptionRefresh() {
    method subscriptionState (line 18032) | get subscriptionState() {
    method receiveRequest (line 18039) | receiveRequest(message) {
    method refresh (line 18065) | refresh() {
    method subscribe (line 18081) | subscribe(delegate, options = {}) {
    method terminate (line 18109) | terminate() {
    method unsubscribe (line 18117) | unsubscribe() {
    method onNotify (line 18132) | onNotify(message) {
    method onRefresh (line 18185) | onRefresh(request) {
    method onTerminated (line 18190) | onTerminated() {
    method refreshTimerClear (line 18195) | refreshTimerClear() {
    method refreshTimerSet (line 18201) | refreshTimerSet() {
    method stateTransition (line 18215) | stateTransition(newState, newExpires) {
    method timerN (line 18302) | timerN() {
  class ReSubscribeUserAgentClient (line 18330) | class ReSubscribeUserAgentClient extends _user_agent_client_js__WEBPACK_...
    method constructor (line 18331) | constructor(dialog, delegate, options) {
    method waitNotifyStop (line 18336) | waitNotifyStop() {
    method receiveResponse (line 18344) | receiveResponse(message) {
  class InviteUserAgentServer (line 18423) | class InviteUserAgentServer extends _user_agent_server_js__WEBPACK_IMPOR...
    method constructor (line 18424) | constructor(core, message, delegate) {
    method dispose (line 18428) | dispose() {
    method accept (line 18442) | accept(options = { statusCode: 200 }) {
    method progress (line 18554) | progress(options = { statusCode: 180 }) {
    method redirect (line 18623) | redirect(contacts, options = { statusCode: 302 }) {
    method reject (line 18634) | reject(options = { statusCode: 486 }) {
  class RegisterUserAgentServer (line 18656) | class RegisterUserAgentServer extends _user_agent_server_js__WEBPACK_IMP...
    method constructor (line 18657) | constructor(core, message, delegate) {
  class SubscribeUserAgentServer (line 18680) | class SubscribeUserAgentServer extends _user_agent_server_js__WEBPACK_IM...
    method constructor (line 18681) | constructor(core, message, delegate) {
  function getHeader (line 18711) | function getHeader(data, headerStart) {
  function parseHeader (line 18741) | function parseHeader(message,
  function parseMessage (line 18877) | function parseMessage(data, logger) {
  class CancelUserAgentClient (line 19372) | class CancelUserAgentClient extends _user_agent_client_js__WEBPACK_IMPOR...
    method constructor (line 19373) | constructor(core, message, delegate) {
  class ReSubscribeUserAgentServer (line 19395) | class ReSubscribeUserAgentServer extends _user_agent_server_js__WEBPACK_...
    method constructor (line 19396) | constructor(dialog, message, delegate) {
  function stripTcpCandidates (line 19549) | function stripTcpCandidates(description) {
  function stripTelephoneEvent (line 19557) | function stripTelephoneEvent(description) {
  function cleanJitsiSdpImageattr (line 19565) | function cleanJitsiSdpImageattr(description) {
  function stripG722 (line 19573) | function stripG722(description) {
  function stripRtpPayload (line 19581) | function stripRtpPayload(payload) {
  function stripVideo (line 19591) | function stripVideo(description) {
  function addMidLines (line 19599) | function addMidLines(description) {
  function holdModifier (line 19623) | function holdModifier(description) {
  function startLocalConference (line 19694) | function startLocalConference(conferenceSessions) {
  class WebAudioSessionDescriptionHandler (line 19717) | class WebAudioSessionDescriptionHandler extends _session_description_han...
    method constructor (line 19718) | constructor(logger, mediaStreamFactory, sessionDescriptionHandlerConfi...
    method enableSenderTracks (line 19728) | enableSenderTracks(enable) {
    method initLocalMediaStream (line 19749) | initLocalMediaStream(stream) {
    method joinWith (line 19764) | joinWith(peer) {
    method setRealLocalMediaStream (line 19790) | setRealLocalMediaStream(stream) {
  function defaultManagedSessionFactory (line 19840) | function defaultManagedSessionFactory() {
  class SessionManager (line 19885) | class SessionManager {
    method constructor (line 19891) | constructor(server, options = {}) {
    method stripUndefinedProperties (line 20121) | static stripUndefinedProperties(options) {
    method getLocalMediaStream (line 20135) | getLocalMediaStream(session) {
    method getRemoteMediaStream (line 20149) | getRemoteMediaStream(session) {
    method getLocalAudioTrack (line 20164) | getLocalAudioTrack(session) {
    method getLocalVideoTrack (line 20173) | getLocalVideoTrack(session) {
    method getRemoteAudioTrack (line 20182) | getRemoteAudioTrack(session) {
    method getRemoteVideoTrack (line 20191) | getRemoteVideoTrack(session) {
    method connect (line 20202) | async connect() {
    method disconnect (line 20215) | async disconnect() {
    method isConnected (line 20228) | isConnected() {
    method register (line 20238) | async register(registererRegisterOptions) {
    method unregister (line 20279) | async unregister(registererUnregisterOptions) {
    method call (line 20300) | async call(destination, inviterOptions, inviterInviteOptions) {
    method hangup (line 20374) | async hangup(session) {
    method answer (line 20390) | async answer(session, invitationAcceptOptions) {
    method decline (line 20418) | async decline(session) {
    method hold (line 20437) | async hold(session) {
    method unhold (line 20450) | async unhold(session) {
    method isHeld (line 20460) | isHeld(session) {
    method mute (line 20470) | mute(session) {
    method unmute (line 20480) | unmute(session) {
    method isMuted (line 20490) | isMuted(session) {
    method sendDTMF (line 20501) | async sendDTMF(session, tone) {
    method transfer (line 20562) | async transfer(session, target, options) {
    method message (line 20583) | async message(destination, message) {
    method constraints (line 20592) | get constraints() {
    method attemptReconnection (line 20603) | attemptReconnection(reconnectionAttempt = 1) {
    method attemptRegistration (line 20648) | attemptRegistration(withoutDelay = false) {
    method cleanupMedia (line 20731) | cleanupMedia(session) {
    method enableReceiverTracks (line 20754) | enableReceiverTracks(session, enable) {
    method enableSenderTracks (line 20765) | enableSenderTracks(session, enable) {
    method initSession (line 20780) | initSession(session, referralInviterOptions) {
    method optionsPingRun (line 20908) | optionsPingRun(requestURI, fromURI, toURI) {
    method optionsPingStart (line 20968) | optionsPingStart() {
    method optionsPingStop (line 21004) | optionsPingStop() {
    method sendInvite (line 21018) | async sendInvite(inviter, inviterOptions, inviterInviteOptions) {
    method sessionAdd (line 21027) | sessionAdd(session) {
    method sessionExists (line 21032) | sessionExists(session) {
    method sessionManaged (line 21036) | sessionManaged(session) {
    method sessionRemove (line 21040) | sessionRemove(session) {
    method setHold (line 21048) | async setHold(session, hold) {
    method setMute (line 21135) | setMute(session, mute) {
    method setupLocalMedia (line 21151) | setupLocalMedia(session) {
    method setupRemoteMedia (line 21175) | setupRemoteMedia(session) {
    method terminate (line 21214) | async terminate(session) {
  class SimpleUser (line 21299) | class SimpleUser {
    method constructor (line 21305) | constructor(server, options = {}) {
    method id (line 21351) | get id() {
    method localMediaStream (line 21355) | get localMediaStream() {
    method remoteMediaStream (line 21359) | get remoteMediaStream() {
    method localAudioTrack (line 21366) | get localAudioTrack() {
    method localVideoTrack (line 21373) | get localVideoTrack() {
    method remoteAudioTrack (line 21380) | get remoteAudioTrack() {
    method remoteVideoTrack (line 21387) | get remoteVideoTrack() {
    method connect (line 21395) | connect() {
    method disconnect (line 21404) | disconnect() {
    method isConnected (line 21411) | isConnected() {
    method register (line 21420) | register(registererRegisterOptions) {
    method unregister (line 21430) | unregister(registererUnregisterOptions) {
    method call (line 21444) | call(destination, inviterOptions, inviterInviteOptions) {
    method hangup (line 21460) | hangup() {
    method answer (line 21477) | answer(invitationAcceptOptions) {
    method decline (line 21491) | decline() {
    method hold (line 21506) | hold() {
    method unhold (line 21521) | unhold() {
    method isHeld (line 21533) | isHeld() {
    method mute (line 21541) | mute() {
    method unmute (line 21550) | unmute() {
    method isMuted (line 21559) | isMuted() {
    method sendDTMF (line 21568) | sendDTMF(tone) {
    method message (line 21581) | message(destination, message) {
  function __webpack_require__ (line 21612) | function __webpack_require__(moduleId) {

FILE: voip_oca/static/src/components/activity_list/activity_list.esm.js
  class ActivityList (line 11) | class ActivityList extends Component {
    method setup (line 12) | setup() {
    method onClick (line 18) | onClick(activity) {

FILE: voip_oca/static/src/components/call/call.esm.js
  class Call (line 12) | class Call extends Component {
    method setup (line 13) | setup() {
    method startTimer (line 25) | startTimer() {
    method resId (line 37) | get resId() {
    method duration (line 44) | get duration() {
    method onEmailClick (line 48) | onEmailClick() {
    method onOpenPartnerClick (line 64) | onOpenPartnerClick() {
    method onScheduleActivity (line 73) | onScheduleActivity() {
    method onTransfer (line 85) | onTransfer(event) {
    method onTransferCall (line 93) | onTransferCall(transferTo) {
    method onHold (line 98) | onHold() {
    method onMute (line 101) | onMute() {
    method onAccept (line 104) | onAccept() {
    method onHangup (line 108) | onHangup() {
    method onOpenNumpad (line 112) | onOpenNumpad() {
    method onNumpadValue (line 115) | onNumpadValue(key) {

FILE: voip_oca/static/src/components/call_list/call_list.esm.js
  class CallList (line 11) | class CallList extends Component {
    method setup (line 12) | setup() {
    method onClick (line 18) | onClick(call) {

FILE: voip_oca/static/src/components/numpad/numpad.esm.js
  class Numpad (line 9) | class Numpad extends Component {
    method setup (line 10) | setup() {
    method onKeyClick (line 22) | onKeyClick(key) {
    method onNumpadValue (line 32) | onNumpadValue(ev) {
    method deleteNumber (line 41) | deleteNumber() {

FILE: voip_oca/static/src/components/partner/partner.esm.js
  class Partner (line 9) | class Partner extends Component {
    method setup (line 10) | setup() {
    method phoneNumber (line 17) | get phoneNumber() {
    method model (line 24) | get model() {
    method resId (line 30) | get resId() {
    method onClose (line 36) | onClose() {
    method onOpenDocument (line 41) | onOpenDocument() {
    method onEmailClick (line 50) | onEmailClick() {
    method onOpenPartnerClick (line 66) | onOpenPartnerClick() {
    method onNewPartnerClick (line 75) | onNewPartnerClick() {
    method onScheduleActivity (line 86) | onScheduleActivity() {
    method onCall (line 98) | onCall() {
    method onMarkAsDone (line 101) | async onMarkAsDone() {
    method onEdit (line 113) | async onEdit() {
    method onDelete (line 116) | async onDelete() {

FILE: voip_oca/static/src/components/partner_list/partner_list.esm.js
  class PartnerList (line 11) | class PartnerList extends Component {
    method setup (line 12) | setup() {
    method onClick (line 18) | onClick(partner) {

FILE: voip_oca/static/src/components/phone_field/phone_field.esm.js
  method setup (line 10) | setup() {
  method onPhoneClick (line 14) | onPhoneClick(ev) {

FILE: voip_oca/static/src/components/softphone/softphone.esm.js
  class VoipOCASoftphone (line 14) | class VoipOCASoftphone extends Component {
    method setup (line 15) | setup() {
    method showInput (line 24) | get showInput() {
    method tabElements (line 29) | get tabElements() {
    method childComponent (line 35) | get childComponent() {
    method childComponentProps (line 42) | get childComponentProps() {
    method _searchInput (line 50) | async _searchInput(value) {
    method onClickBar (line 57) | onClickBar() {
    method onCall (line 60) | onCall() {
    method onSelectTab (line 73) | onSelectTab(tag) {
    method onClosePhone (line 77) | onClosePhone(ev) {
    method onOpenNumpad (line 82) | onOpenNumpad() {

FILE: voip_oca/static/src/components/transfer/transfer.esm.js
  class Transfer (line 8) | class Transfer extends Component {
    method setup (line 9) | setup() {
    method onKeydown (line 14) | onKeydown(ev) {
    method transfer (line 22) | transfer() {

FILE: voip_oca/static/src/components/voip_oca_systray/voip_oca_systray.esm.js
  class VoipOCASystray (line 9) | class VoipOCASystray extends Component {
    method setup (line 10) | setup() {
    method onClick (line 13) | onClick() {

FILE: voip_oca/static/src/core/phone/@types/model.d.ts
  type Call (line 4) | interface Call extends CallClass {}
  type Thread (line 5) | interface Thread {
  type Models (line 9) | interface Models {

FILE: voip_oca/static/src/core/phone/call_model.esm.js
  class Call (line 23) | class Call extends Record {
    method get (line 31) | static get(data) {
    method insert (line 37) | static insert() {
    method update (line 44) | update(data) {
    method date (line 60) | get date() {
    method dateStr (line 70) | get dateStr() {
    method iconTypeCall (line 73) | get iconTypeCall() {
    method duration (line 83) | get duration() {
    method durationStr (line 93) | get durationStr() {

FILE: voip_oca/static/src/services/voip_agent_service.esm.js
  class VoipAgent (line 13) | class VoipAgent {
    method constructor (line 14) | constructor(env, services) {
    method hasRtcSupport (line 28) | get hasRtcSupport() {
    method agentConfig (line 35) | get agentConfig() {
    method connectAgent (line 57) | async connectAgent() {
    method reconnectAgent (line 113) | async reconnectAgent(attempt = 0) {
    method playTone (line 138) | playTone(tone) {
    method stopTone (line 144) | stopTone() {
    method onInvite (line 148) | async onInvite(session) {
    method _onDisconnect (line 176) | _onDisconnect(error) {
    method _onSessionStateChange (line 190) | _onSessionStateChange(newState) {
    method setCallAudio (line 210) | setCallAudio() {
    method updateCallAudio (line 221) | updateCallAudio() {
    method createCall (line 229) | async createCall(options) {
    method call (line 242) | async call({number, partner}) {
    method transfer (line 286) | transfer(number) {
    method _onTransferAccepted (line 300) | _onTransferAccepted() {
    method _onInviteAccepted (line 304) | _onInviteAccepted() {
    method _onInviteRejected (line 311) | _onInviteRejected(response) {
    method _onCancelInvitation (line 324) | async _onCancelInvitation() {
    method _onHanghup (line 329) | async _onHanghup() {
    method hangup (line 339) | async hangup() {
    method mute (line 359) | async mute() {
    method hold (line 363) | async hold() {
    method accept (line 384) | async accept() {
    method _onRegistererRejected (line 391) | async _onRegistererRejected(response) {
    method _onRegistererStateChange (line 401) | _onRegistererStateChange(state) {
  method start (line 408) | async start() {

FILE: voip_oca/static/src/services/voip_oca_service.esm.js
  class VoipOCA (line 14) | class VoipOCA {
    method constructor (line 15) | constructor(env, services) {
    method handleVoip (line 47) | handleVoip() {
    method handleFold (line 53) | handleFold() {
    method open (line 56) | async open({partner = false, activity = false, call = false}) {
    method acceptCall (line 69) | async acceptCall() {
    method rejectCall (line 74) | async rejectCall() {
    method partners (line 83) | get partners() {
    method activities (line 96) | get activities() {
    method calls (line 109) | get calls() {
    method partnerProps (line 120) | get partnerProps() {
    method searchPartners (line 129) | async searchPartners(_search = "", offset = 0, limit = 13) {
    method searchActivities (line 139) | async searchActivities(_search = "", offset = 0, limit = 13) {
    method searchCalls (line 157) | async searchCalls(_search = "", offset = 0, limit = 13) {
    method imagePartner (line 168) | imagePartner(partner_id) {
  method start (line 179) | async start() {

FILE: voip_oca/static/src/utils/utils.esm.js
  function normalize (line 8) | function normalize(str) {
  function matchString (line 15) | function matchString(targetString, substring) {
  function durationStr (line 22) | function durationStr(duration) {

FILE: voip_oca/static/tests/mock_server/mock_models/mail_activity.esm.js
  class MailActivity (line 8) | class MailActivity extends mailModels.MailActivity {
    method get_call_activities (line 14) | async get_call_activities() {

FILE: voip_oca/static/tests/mock_server/mock_models/res_partner.esm.js
  class ResPartner (line 7) | class ResPartner extends mailModels.ResPartner {
    method format_partner (line 8) | format_partner() {
    method voip_get_contacts (line 19) | voip_get_contacts() {

FILE: voip_oca/static/tests/mock_server/mock_models/voip_call.esm.js
  class VoipOcaCall (line 7) | class VoipOcaCall extends models.ServerModel {
    method get_recent_calls (line 46) | get_recent_calls() {
    method format_call (line 51) | format_call() {

FILE: voip_oca/static/tests/mock_server/mock_models/voip_pbx.esm.js
  class VoipOcaPbx (line 7) | class VoipOcaPbx extends models.ServerModel {

FILE: voip_oca/static/tests/voip_test_helpers.esm.js
  function defineVoipModels (line 20) | function defineVoipModels() {

FILE: voip_oca/tests/test_backend.py
  class TestVoipOca (line 7) | class TestVoipOca(TransactionCase):
    method setUpClass (line 9) | def setUpClass(cls):
    method test_partner_search (line 78) | def test_partner_search(self):
    method test_activity_partner (line 86) | def test_activity_partner(self):
    method test_activity_search (line 92) | def test_activity_search(self):
    method test_call_search (line 104) | def test_call_search(self):
    method test_call_process_ok (line 112) | def test_call_process_ok(self):
    method test_call_process_rejected (line 133) | def test_call_process_rejected(self):

FILE: voip_oca/tests/test_frontend.py
  class TestFrontend (line 10) | class TestFrontend(common.HttpCase):
    method setUpClass (line 12) | def setUpClass(cls):
    method test_session_unconfigured (line 43) | def test_session_unconfigured(self):
    method test_session_configured (line 53) | def test_session_configured(self):

FILE: voip_oca/tests/test_js.py
  class TestAutomationOCA (line 9) | class TestAutomationOCA(WebSuite):
    method get_hoot_filters (line 12) | def get_hoot_filters(self):
    method test_voip_oca (line 16) | def test_voip_oca(self):
Condensed preview — 156 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,184K chars).
[
  {
    "path": ".copier-answers.yml",
    "chars": 809,
    "preview": "# Do NOT update manually; changes here will be overwritten by Copier\n_commit: v1.40\n_src_path: git+https://github.com/OC"
  },
  {
    "path": ".editorconfig",
    "chars": 558,
    "preview": "# Configuration for known file extensions\n[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]\ncharset = utf-8\nend_of"
  },
  {
    "path": ".gitattributes",
    "chars": 34,
    "preview": "test-requirements.txt merge=union\n"
  },
  {
    "path": ".github/workflows/pre-commit.yml",
    "chars": 1735,
    "preview": "name: pre-commit\n\non:\n  pull_request:\n    branches:\n      - \"18.0*\"\n  push:\n    branches:\n      - \"18.0\"\n      - \"18.0-o"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 2751,
    "preview": "name: Mark stale issues and pull requests\n\non:\n  schedule:\n    - cron: \"0 12 * * 0\"\n\njobs:\n  stale:\n    runs-on: ubuntu-"
  },
  {
    "path": ".github/workflows/test.yml",
    "chars": 2565,
    "preview": "name: tests\n\non:\n  pull_request:\n    branches:\n      - \"18.0*\"\n  push:\n    branches:\n      - \"18.0\"\n      - \"18.0-ocabot"
  },
  {
    "path": ".gitignore",
    "chars": 848,
    "preview": "# 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"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 4650,
    "preview": "exclude: |\n  (?x)\n  # NOT INSTALLABLE ADDONS\n  # END NOT INSTALLABLE ADDONS\n  # Files and folders generated by bots, to "
  },
  {
    "path": ".pylintrc",
    "chars": 3543,
    "preview": "\n\n[MASTER]\nload-plugins=pylint_odoo\nscore=n\n\n[ODOOLINT]\nreadme-template-url=\"https://github.com/OCA/maintainer-tools/blo"
  },
  {
    "path": ".pylintrc-mandatory",
    "chars": 2649,
    "preview": "\n[MASTER]\nload-plugins=pylint_odoo\nscore=n\n\n[ODOOLINT]\nreadme-template-url=\"https://github.com/OCA/maintainer-tools/blob"
  },
  {
    "path": ".ruff.toml",
    "chars": 652,
    "preview": "\ntarget-version = \"py310\"\nfix = true\n\n[lint]\nextend-select = [\n    \"B\",\n    \"C90\",\n    \"E501\",  # line too long (default"
  },
  {
    "path": "LICENSE",
    "chars": 34523,
    "preview": "                    GNU AFFERO GENERAL PUBLIC LICENSE\n                       Version 3, 19 November 2007\n\n Copyright (C)"
  },
  {
    "path": "README.md",
    "chars": 2338,
    "preview": "\n[![Support the OCA](https://odoo-community.org/readme-banner-image)](https://odoo-community.org/get-involved?utm_source"
  },
  {
    "path": "base_phone/README.rst",
    "chars": 4066,
    "preview": "==========\nBase Phone\n==========\n\n.. \n   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n   !! This file is generat"
  },
  {
    "path": "base_phone/__init__.py",
    "chars": 42,
    "preview": "from . import models\nfrom . import wizard\n"
  },
  {
    "path": "base_phone/__manifest__.py",
    "chars": 1093,
    "preview": "# Copyright 2014-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis@via.ecp.fr>\n# @migr"
  },
  {
    "path": "base_phone/i18n/am_ET.po",
    "chars": 21715,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/ar_001.po",
    "chars": 21677,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/base_phone.pot",
    "chars": 21533,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/ca_ES.po",
    "chars": 21751,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/cs_CZ.po",
    "chars": 21682,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/de.po",
    "chars": 23460,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/el_GR.po",
    "chars": 21761,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es.po",
    "chars": 24091,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es_AR.po",
    "chars": 24097,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es_CR.po",
    "chars": 23628,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es_EC.po",
    "chars": 23628,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es_ES.po",
    "chars": 21928,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * base_phone\n#\n# Translat"
  },
  {
    "path": "base_phone/i18n/es_MX.po",
    "chars": 23627,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/es_VE.po",
    "chars": 23628,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/et_EE.po",
    "chars": 21670,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/fi.po",
    "chars": 21799,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/fr.po",
    "chars": 24217,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/gl_ES.po",
    "chars": 21720,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/hr.po",
    "chars": 21685,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/it.po",
    "chars": 26338,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/lt.po",
    "chars": 21685,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/nl.po",
    "chars": 21680,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/nl_BE.po",
    "chars": 21728,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/pl.po",
    "chars": 21678,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/pt.po",
    "chars": 21752,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/pt_BR.po",
    "chars": 23663,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/pt_PT.po",
    "chars": 21954,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# * base_phone\n#\n# Translat"
  },
  {
    "path": "base_phone/i18n/ro.po",
    "chars": 21674,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/ru.po",
    "chars": 21686,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/sl_SI.po",
    "chars": 22901,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/th.po",
    "chars": 21673,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/tr.po",
    "chars": 25961,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/i18n/vi_VN.po",
    "chars": 21675,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* base_phone\n#\nmsgid \"\"\n"
  },
  {
    "path": "base_phone/models/__init__.py",
    "chars": 116,
    "preview": "from . import phone_validation_mixin\nfrom . import res_company\nfrom . import res_partner\nfrom . import phone_common\n"
  },
  {
    "path": "base_phone/models/ir_fields_converter.py",
    "chars": 427,
    "preview": "# Copyright 2016-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/models/phone_common.py",
    "chars": 6454,
    "preview": "# Copyright 2010-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/models/phone_validation_mixin.py",
    "chars": 1153,
    "preview": "# Copyright 2018-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/models/res_company.py",
    "chars": 1282,
    "preview": "# Copyright 2016-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/models/res_partner.py",
    "chars": 1052,
    "preview": "# Copyright 2016-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/pyproject.toml",
    "chars": 69,
    "preview": "[build-system]\nrequires = [\"whool\"]\nbuild-backend = \"whool.buildapi\"\n"
  },
  {
    "path": "base_phone/readme/CONTRIBUTORS.md",
    "chars": 267,
    "preview": "- Alexis de Lattre \\<<alexis.delattre@akretion.com>\\>\n- Sébastien Beau \\<<sebastien.beau@akretion.com>\\>\n- [Dixmit](http"
  },
  {
    "path": "base_phone/readme/DESCRIPTION.md",
    "chars": 802,
    "preview": "This module provides common methods and wizards which can be useful to\ndevelop a connector between Odoo and a telephony "
  },
  {
    "path": "base_phone/requirements.txt",
    "chars": 13,
    "preview": "phonenumbers\n"
  },
  {
    "path": "base_phone/security/ir.model.access.csv",
    "chars": 415,
    "preview": "id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink\ncallerid_res_partner_read,Read access on re"
  },
  {
    "path": "base_phone/security/phone_security.xml",
    "chars": 418,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\n  Base Phone module for Odoo/OpenERP\n  Copyright (C) 2010-2014 Alexis de La"
  },
  {
    "path": "base_phone/static/description/index.html",
    "chars": 13722,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "base_phone/static/src/components/on_dial_button/on_dial_button.esm.js",
    "chars": 2563,
    "preview": "/*\n    Copyright 2024 Dixmit\n    License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component} fr"
  },
  {
    "path": "base_phone/static/src/components/on_dial_button/on_dial_button.xml",
    "chars": 544,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<templates xml:space=\"preserve\">\n\n    <!-- Copyright 2024 Dixmit\n     License AG"
  },
  {
    "path": "base_phone/static/src/components/phone_field/phone_field.esm.js",
    "chars": 401,
    "preview": "/*\n    Copyright 2024 Dixmit\n    License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).\n*/\n\nimport {OnDialButton}"
  },
  {
    "path": "base_phone/static/src/components/phone_field/phone_field.xml",
    "chars": 787,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<templates xml:space=\"preserve\">\n\n    <!-- Copyright 2024 Dixmit\n     License AG"
  },
  {
    "path": "base_phone/tests/__init__.py",
    "chars": 30,
    "preview": "from . import test_base_phone\n"
  },
  {
    "path": "base_phone/tests/test_base_phone.py",
    "chars": 4154,
    "preview": "# Copyright 2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.com>\n#"
  },
  {
    "path": "base_phone/views/res_users_view.xml",
    "chars": 1763,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\n  Copyright 2010-2021 Akretion France (http://www.akretion.com/)\n  @author:"
  },
  {
    "path": "base_phone/wizard/__init__.py",
    "chars": 105,
    "preview": "from . import res_config_settings\nfrom . import reformat_all_phonenumbers\nfrom . import number_not_found\n"
  },
  {
    "path": "base_phone/wizard/number_not_found.py",
    "chars": 4009,
    "preview": "# Copyright 2010-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/wizard/number_not_found_view.xml",
    "chars": 2618,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\n  Copyright 2012-2018 Akretion France\n  @author: Alexis de Lattre <alexis.d"
  },
  {
    "path": "base_phone/wizard/reformat_all_phonenumbers.py",
    "chars": 2498,
    "preview": "# Copyright 2012-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/wizard/reformat_all_phonenumbers_view.xml",
    "chars": 2944,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\n  Copyright (C) 2012-2021 Akretion France (http://www.akretion.com/)\n  @aut"
  },
  {
    "path": "base_phone/wizard/res_config_settings.py",
    "chars": 496,
    "preview": "# Copyright 2017-2021 Akretion France (http://www.akretion.com/)\n# @author: Alexis de Lattre <alexis.delattre@akretion.c"
  },
  {
    "path": "base_phone/wizard/res_config_settings.xml",
    "chars": 1476,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!--\n  Copyright 2014-2019 Akretion France (http://www.akretion.com/)\n  @author:"
  },
  {
    "path": "checklog-odoo.cfg",
    "chars": 196,
    "preview": "[checklog-odoo]\nignore=\n    WARNING.* 0 failed, 0 error\\(s\\).*\n    WARNING .* Killing chrome descendants-or-self .*\n    "
  },
  {
    "path": "eslint.config.cjs",
    "chars": 6371,
    "preview": "var globals = require('globals');\njsdoc = require(\"eslint-plugin-jsdoc\");\n\nconst config = [{\n    plugins: {\n      jsdoc,"
  },
  {
    "path": "prettier.config.cjs",
    "chars": 365,
    "preview": "/** @type {import('prettier').Config} */\n\nconst config = {\n  // https://github.com/prettier/prettier/issues/15388#issuec"
  },
  {
    "path": "requirements.txt",
    "chars": 62,
    "preview": "# generated from manifests external_dependencies\nphonenumbers\n"
  },
  {
    "path": "setup/_metapackage/pyproject.toml",
    "chars": 286,
    "preview": "[project]\nname = \"odoo-addons-oca-connector-telephony\"\nversion = \"18.0.20250613.0\"\ndependencies = [\n    \"odoo-addon-base"
  },
  {
    "path": "voip_oca/README.rst",
    "chars": 9593,
    "preview": ".. image:: https://odoo-community.org/readme-banner-image\n   :target: https://odoo-community.org/get-involved?utm_source"
  },
  {
    "path": "voip_oca/__init__.py",
    "chars": 21,
    "preview": "from . import models\n"
  },
  {
    "path": "voip_oca/__manifest__.py",
    "chars": 951,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\n{\n    \"name\": \"Voip OCA\",\n    "
  },
  {
    "path": "voip_oca/data/neutralize.sql",
    "chars": 167,
    "preview": "-- disable VOIP module by default\n\nUPDATE voip_pbx SET mode = 'test';\nUPDATE res_users SET voip_username = NULL, voip_pa"
  },
  {
    "path": "voip_oca/demo/demo_data.xml",
    "chars": 1038,
    "preview": "<odoo>\n    <record id=\"voip_call_1\" model=\"voip.call\">\n        <field name=\"partner_id\" ref=\"base.res_partner_1\" />\n    "
  },
  {
    "path": "voip_oca/i18n/it.po",
    "chars": 15894,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* voip_oca\n#\nmsgid \"\"\nms"
  },
  {
    "path": "voip_oca/i18n/voip_oca.pot",
    "chars": 14167,
    "preview": "# Translation of Odoo Server.\n# This file contains the translation of the following modules:\n# \t* voip_oca\n#\nmsgid \"\"\nms"
  },
  {
    "path": "voip_oca/models/__init__.py",
    "chars": 181,
    "preview": "from . import res_partner\nfrom . import voip_call\nfrom . import mail_activity\nfrom . import mail_activity_mixin\nfrom . i"
  },
  {
    "path": "voip_oca/models/ir_http.py",
    "chars": 431,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).\n\nfrom odoo import models\nfr"
  },
  {
    "path": "voip_oca/models/mail_activity.py",
    "chars": 2020,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo import api, fields, "
  },
  {
    "path": "voip_oca/models/mail_activity_mixin.py",
    "chars": 692,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo import fields, model"
  },
  {
    "path": "voip_oca/models/res_partner.py",
    "chars": 1196,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo import api, models\nf"
  },
  {
    "path": "voip_oca/models/res_users.py",
    "chars": 1416,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo import fields, model"
  },
  {
    "path": "voip_oca/models/voip_call.py",
    "chars": 3624,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\n\nfrom odoo import api, fields,"
  },
  {
    "path": "voip_oca/models/voip_pbx.py",
    "chars": 489,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo import fields, model"
  },
  {
    "path": "voip_oca/pyproject.toml",
    "chars": 69,
    "preview": "[build-system]\nrequires = [\"whool\"]\nbuild-backend = \"whool.buildapi\"\n"
  },
  {
    "path": "voip_oca/readme/CONFIGURE.md",
    "chars": 778,
    "preview": "Create the PBX Connection\n-------------------------\n\n- Access in Debug mode.\n- Go to `Settings > Technical > Discuss > P"
  },
  {
    "path": "voip_oca/readme/CONTEXT.md",
    "chars": 303,
    "preview": "This module is intended to integrate directly with a VOIP Provider.\n\nThe provider need to supply a WebRTC system where w"
  },
  {
    "path": "voip_oca/readme/CONTRIBUTORS.md",
    "chars": 131,
    "preview": "\n- [Dixmit](https://www.dixmit.com):\n  - Enric Alomar\n  - Luis Rodríguez\n- [Tecnativa](https://www.tecnativa.com):\n  - C"
  },
  {
    "path": "voip_oca/readme/CREDITS.md",
    "chars": 372,
    "preview": "The development of this module has been financially supported by:\n\n- Associacion Española de Odoo ([AEODOO](https://www."
  },
  {
    "path": "voip_oca/readme/DESCRIPTION.md",
    "chars": 610,
    "preview": "This module allows the use of VOIP directly from Odoo.\n\nIt relies on SIP.js to connect to the PBX using a websocket dire"
  },
  {
    "path": "voip_oca/readme/ROADMAP.md",
    "chars": 388,
    "preview": "The following options are interesting but are not implemented right now:\n\n- Allow to enable or disable the VOIP as a use"
  },
  {
    "path": "voip_oca/readme/USAGE.md",
    "chars": 2942,
    "preview": "Automatically the system will login into the PBX server once we enter odoo with our user.\nIf we are on a test environmen"
  },
  {
    "path": "voip_oca/security/ir.model.access.csv",
    "chars": 309,
    "preview": "id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink\naccess_voip_call,access_voip_call,model_voi"
  },
  {
    "path": "voip_oca/static/description/index.html",
    "chars": 22850,
    "preview": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\""
  },
  {
    "path": "voip_oca/static/lib/sip.js",
    "chars": 1048966,
    "preview": "/*!\n * \n *  SIP version 0.21.2\n *  Copyright (c) 2014-2022 Junction Networks, Inc <http://www.onsip.com>\n *  Homepage: h"
  },
  {
    "path": "voip_oca/static/src/components/activity_list/activity_list.esm.js",
    "chars": 999,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, o"
  },
  {
    "path": "voip_oca/static/src/components/activity_list/activity_list.scss",
    "chars": 96,
    "preview": ".o_voip_activity_item {\n    border-bottom: 1px solid var(--border-color, #d8dadd) !important;\n}\n"
  },
  {
    "path": "voip_oca/static/src/components/activity_list/activity_list.xml",
    "chars": 885,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/call/call.esm.js",
    "chars": 3534,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, u"
  },
  {
    "path": "voip_oca/static/src/components/call/call.xml",
    "chars": 5162,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/call_list/call_list.esm.js",
    "chars": 953,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, o"
  },
  {
    "path": "voip_oca/static/src/components/call_list/call_list.scss",
    "chars": 92,
    "preview": ".o_voip_call_item {\n    border-bottom: 1px solid var(--border-color, #d8dadd) !important;\n}\n"
  },
  {
    "path": "voip_oca/static/src/components/call_list/call_list.xml",
    "chars": 826,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/numpad/numpad.esm.js",
    "chars": 1834,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {Component, on"
  },
  {
    "path": "voip_oca/static/src/components/numpad/numpad.scss",
    "chars": 71,
    "preview": ".no-border {\n    outline: none;\n}\n.o_numpad_input {\n    width: 100%;\n}\n"
  },
  {
    "path": "voip_oca/static/src/components/numpad/numpad.xml",
    "chars": 1211,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/partner/partner.esm.js",
    "chars": 3965,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component} f"
  },
  {
    "path": "voip_oca/static/src/components/partner/partner.xml",
    "chars": 4404,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/partner_list/partner_list.esm.js",
    "chars": 968,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, o"
  },
  {
    "path": "voip_oca/static/src/components/partner_list/partner_list.scss",
    "chars": 245,
    "preview": ".o_voip_partner_item {\n    border-bottom: 1px solid var(--border-color, #d8dadd) !important;\n    align-items: center;\n  "
  },
  {
    "path": "voip_oca/static/src/components/partner_list/partner_list.xml",
    "chars": 648,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/phone_field/phone_field.esm.js",
    "chars": 616,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {PhoneField} f"
  },
  {
    "path": "voip_oca/static/src/components/phone_field/phone_field.xml",
    "chars": 889,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/softphone/softphone.esm.js",
    "chars": 3058,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, o"
  },
  {
    "path": "voip_oca/static/src/components/softphone/softphone.scss",
    "chars": 1134,
    "preview": ".o_voip_softphone {\n    width: 300px;\n    height: auto;\n    max-height: 70%;\n    z-index: 99;\n\n    .o_voip_softphone_hea"
  },
  {
    "path": "voip_oca/static/src/components/softphone/softphone.xml",
    "chars": 4517,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/transfer/transfer.esm.js",
    "chars": 769,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {Component, o"
  },
  {
    "path": "voip_oca/static/src/components/transfer/transfer.xml",
    "chars": 1074,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/components/voip_oca_systray/voip_oca_systray.esm.js",
    "chars": 591,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {Component, us"
  },
  {
    "path": "voip_oca/static/src/components/voip_oca_systray/voip_oca_systray.scss",
    "chars": 248,
    "preview": ".o_nav_entry {\n    &:hover {\n        background-color: rgba(0, 0, 0, 0.075);\n    }\n    &.o_voip_disconnected {\n        b"
  },
  {
    "path": "voip_oca/static/src/components/voip_oca_systray/voip_oca_systray.xml",
    "chars": 551,
    "preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/static/src/core/phone/@types/model.d.ts",
    "chars": 252,
    "preview": "declare module \"models\" {\n  import {Call as CallClass} from \"@voip_oca/core/phone/call_model\";\n\n  export interface Call "
  },
  {
    "path": "voip_oca/static/src/core/phone/call_model.esm.js",
    "chars": 2509,
    "preview": "/* @odoo-module */\n\nimport {Record} from \"@mail/core/common/record\";\nimport {deserializeDateTime} from \"@web/core/l10n/d"
  },
  {
    "path": "voip_oca/static/src/services/voip_agent_service.esm.js",
    "chars": 13740,
    "preview": "/* global SIP */\n/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n    Thi"
  },
  {
    "path": "voip_oca/static/src/services/voip_oca_service.esm.js",
    "chars": 5745,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n    This service will co"
  },
  {
    "path": "voip_oca/static/src/utils/utils.esm.js",
    "chars": 1247,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\n\nimport {_t} from \"@w"
  },
  {
    "path": "voip_oca/static/tests/components/ActivityTab.esm.test.js",
    "chars": 1971,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {click, start,"
  },
  {
    "path": "voip_oca/static/tests/components/CallTab.esm.test.js",
    "chars": 2412,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {click, start,"
  },
  {
    "path": "voip_oca/static/tests/components/NumpadTab.esm.test.js",
    "chars": 1626,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {click, start}"
  },
  {
    "path": "voip_oca/static/tests/components/PartnerTab.esm.test.js",
    "chars": 1670,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {click, start,"
  },
  {
    "path": "voip_oca/static/tests/components/Softphone.esm.test.js",
    "chars": 2116,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {click, start}"
  },
  {
    "path": "voip_oca/static/tests/mock_server/mock_models/mail_activity.esm.js",
    "chars": 583,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {fields} from "
  },
  {
    "path": "voip_oca/static/tests/mock_server/mock_models/res_partner.esm.js",
    "chars": 765,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {mailModels} f"
  },
  {
    "path": "voip_oca/static/tests/mock_server/mock_models/voip_call.esm.js",
    "chars": 1885,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {fields, model"
  },
  {
    "path": "voip_oca/static/tests/mock_server/mock_models/voip_pbx.esm.js",
    "chars": 693,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {fields, model"
  },
  {
    "path": "voip_oca/static/tests/voip_test_helpers.esm.js",
    "chars": 698,
    "preview": "/*\n    Copyright 2025 Dixmit\n    License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n*/\nimport {MailActivity}"
  },
  {
    "path": "voip_oca/tests/__init__.py",
    "chars": 77,
    "preview": "from . import test_frontend\nfrom . import test_backend\nfrom . import test_js\n"
  },
  {
    "path": "voip_oca/tests/test_backend.py",
    "chars": 5988,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\n\nfrom odoo.tests.common import "
  },
  {
    "path": "voip_oca/tests/test_frontend.py",
    "chars": 2228,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\nimport json\nfrom uuid import uu"
  },
  {
    "path": "voip_oca/tests/test_js.py",
    "chars": 457,
    "preview": "# Copyright 2025 Dixmit\n# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).\nimport odoo\n\nfrom odoo.addons.w"
  },
  {
    "path": "voip_oca/views/menus.xml",
    "chars": 330,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/views/res_users.xml",
    "chars": 1534,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/views/voip_call.xml",
    "chars": 1058,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  },
  {
    "path": "voip_oca/views/voip_pbx.xml",
    "chars": 1859,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<!-- Copyright 2025 Dixmit\n     License AGPL-3.0 or later (https://www.gnu.org/l"
  }
]

About this extraction

This page contains the full source code of the OCA/connector-telephony GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 156 files (2.0 MB), approximately 529.5k tokens, and a symbol index with 982 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!