Initial commit: Odoo 18.0-20251222 extra-addons
Some checks failed
pre-commit / pre-commit (push) Has been cancelled
tests / Detect unreleased dependencies (push) Has been cancelled
tests / test with OCB (push) Has been cancelled
tests / test with Odoo (push) Has been cancelled

This commit is contained in:
tocmo0nlord
2026-03-13 20:43:25 +00:00
parent 36e847a7df
commit adbe430761
9472 changed files with 1265727 additions and 0 deletions

112
base_technical_user/README.rst Executable file
View File

@@ -0,0 +1,112 @@
===================
Base Technical User
===================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6b9aa9e6df3dd5d831874f6d9d9f252d4da28ffc66930408903c3befdbeffb8f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png
:target: https://odoo-community.org/page/development-status
:alt: Production/Stable
.. |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%2Fserver--tools-lightgray.png?logo=github
:target: https://github.com/OCA/server-tools/tree/18.0/base_technical_user
:alt: OCA/server-tools
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-base_technical_user
: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/server-tools&target_branch=18.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the functionality of company management. It allows
you to bind a technical user on the company in order to use it in batch
processes.
The technical user must - be inactive to avoid login - be in the
required groups depending of what you need to do
**Table of contents**
.. contents::
:local:
Usage
=====
If you install the module, you will find a tab on the company form
allowing to define the technical user.
In your code you can use the following helper that will return you
- a self with the user tech if configured
- or a self with sudo user
.. code:: python
self_tech = self.sudo_tech()
If you want to raise an error if the tech user in not configured just
call it with
.. code:: python
self_tech = self.sudo_tech(raise_if_missing)
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-tools/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-tools/issues/new?body=module:%20base_technical_user%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
-------
* ACSONE SA/NV
Contributors
------------
- Cédric Pigeon <cedric.pigeon@acsone.eu>
- Khoi (Kien Kim) <khoikk@trobz.com>
Other credits
-------------
The migration of this module from 17.0 to 18.0 was financially supported
by:
- Camptocamp.
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.
This module is part of the `OCA/server-tools <https://github.com/OCA/server-tools/tree/18.0/base_technical_user>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

@@ -0,0 +1 @@
from . import models

View File

@@ -0,0 +1,16 @@
# Copyright 2017 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
"name": "Base Technical User",
"summary": """
Add a technical user parameter on the company """,
"author": "ACSONE SA/NV, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-tools",
"category": "Hidden/Dependency",
"version": "18.0.1.0.1",
"license": "AGPL-3",
"development_status": "Production/Stable",
"depends": ["base"],
"data": ["views/res_company_view.xml"],
"installable": True,
}

57
base_technical_user/i18n/ar.po Executable file
View File

@@ -0,0 +1,57 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr ""
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""

View File

@@ -0,0 +1,55 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
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_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr ""
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""

60
base_technical_user/i18n/de.po Executable file
View File

@@ -0,0 +1,60 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Niki Waibel <niki.waibel@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2017-12-01 02:10+0000\n"
"Last-Translator: Niki Waibel <niki.waibel@gmail.com>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Unternehmen"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr ""
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""

61
base_technical_user/i18n/es.po Executable file
View File

@@ -0,0 +1,61 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2023-06-15 17:09+0000\n"
"Last-Translator: kikopeiro <francisco.peiro@factorlibre.com>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr "Base"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Compañías"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr "Configuración"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr "Búsqueda inteligente"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "Parámetros técnicos"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "Usuario técnico"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr "En la compañia {} no se encuentra el usuario técnico"
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr "Este usuario debe usarse para procesos con propósitos técnicos"

62
base_technical_user/i18n/fr.po Executable file
View File

@@ -0,0 +1,62 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Quentin THEURET <odoo@kerpeo.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2021-05-14 19:47+0000\n"
"Last-Translator: Yves Le Doeuff <yld@alliasys.fr>\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.3.2\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Sociétés"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr "Recherche intelligente"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "Paramètres techniques"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "Utilisateur technique"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr "L'utilisateur technique manque dans l'entreprise {}"
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""
"Cet utilisateur peut être utilisé par un processus à des fins techniques"

61
base_technical_user/i18n/hr.po Executable file
View File

@@ -0,0 +1,61 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Bole <bole@dajmi5.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2017-12-01 02:10+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>, 2017\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Tvrtke"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr "Postavke"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "Tehnički parametri"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "Tehnički korisnik"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr "Ovaj korisnik može biti korišten od strane procesa u tehničke svrhe"

61
base_technical_user/i18n/it.po Executable file
View File

@@ -0,0 +1,61 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Paolo Valier <paolo.valier@hotmail.it>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-06 02:25+0000\n"
"PO-Revision-Date: 2024-01-02 16:34+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr "Base"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Aziende"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr "Configurazione"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr "Ricerca intelligente"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "Parametri Tecnici"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "Utente tecnico"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr "Manca l'utente tecnico nell'azienda {}"
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr "Questo utente può essere usato dai processi per motvi tecnici"

View File

@@ -0,0 +1,61 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2017-12-01 02:10+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Bedrijven"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr ""
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr ""
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""

62
base_technical_user/i18n/pt.po Executable file
View File

@@ -0,0 +1,62 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
# Translators:
# Pedro Castro Silva <inactive+pcs.sossia@transifex.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:10+0000\n"
"PO-Revision-Date: 2021-01-11 01:44+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 4.3.2\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr ""
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "Empresas"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr "Configuração"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "Parâmetros Técnicos"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "Utilizador Técnico"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr "O utilizador técnico está em falta na empresa {}"
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr ""
"Este utilizador pode ser usado por um processo para funcionalidades técnicas"

View File

@@ -0,0 +1,58 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * base_technical_user
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-06-16 11:07+0000\n"
"Last-Translator: xtanuiha <feihu.zhang@live.com>\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 4.17\n"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_base
msgid "Base"
msgstr "基础"
#. module: base_technical_user
#: model:ir.model,name:base_technical_user.model_res_company
msgid "Companies"
msgstr "公司"
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Configuration"
msgstr "配置"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__smart_search
msgid "Smart Search"
msgstr ""
#. module: base_technical_user
#: model_terms:ir.ui.view,arch_db:base_technical_user.res_company_view_form_inherit_base_technical_user
msgid "Technical Parameters"
msgstr "技术参数"
#. module: base_technical_user
#: model:ir.model.fields,field_description:base_technical_user.field_res_company__user_tech_id
msgid "Technical User"
msgstr "技术用户"
#. module: base_technical_user
#. odoo-python
#: code:addons/base_technical_user/models/models.py:0
msgid "The technical user is missing in the company {}"
msgstr "在公司 {} 中缺少技术用户"
#. module: base_technical_user
#: model:ir.model.fields,help:base_technical_user.field_res_company__user_tech_id
msgid "This user can be used by process for technical purpose"
msgstr "此用户可由流程用于技术目的"

View File

@@ -0,0 +1,2 @@
from . import res_company
from . import models

View File

@@ -0,0 +1,36 @@
# Copyright 2020 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, models
from odoo.exceptions import UserError
class Base(models.AbstractModel):
_inherit = "base"
def sudo_tech(self, raise_if_missing=False):
self_sudoer = self
tech_user = self.env.company.user_tech_id
if tech_user:
self_sudoer = self.with_user(tech_user.id)
# We restrict the allowed companies to the one of the tech user
allowed_company_ids = self.env.context.get("allowed_company_ids")
# TODO: Is any(...) part necessary as we can
# consider company should always be the one of the tech_user ?
if allowed_company_ids and any(
company
for company in allowed_company_ids
if company != tech_user.company_id.id
):
self_sudoer = self_sudoer.with_context(
allowed_company_ids=self.env.company.ids
)
elif raise_if_missing:
raise UserError(
_("The technical user is missing in the company {}").format(
self.env.company.name
)
)
return self_sudoer

View File

@@ -0,0 +1,14 @@
# Copyright 2017 ACSONE SA/NV (<http://acsone.eu>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import fields, models
class ResCompany(models.Model):
_inherit = "res.company"
user_tech_id = fields.Many2one(
comodel_name="res.users",
string="Technical User",
help="This user can be used by process for technical purpose",
domain="[('company_id', '=', id)]",
)

View File

@@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@@ -0,0 +1,2 @@
- Cédric Pigeon \<<cedric.pigeon@acsone.eu>\>
- Khoi (Kien Kim) \<<khoikk@trobz.com>\>

View File

@@ -0,0 +1,2 @@
The migration of this module from 17.0 to 18.0 was financially supported by:
- Camptocamp.

View File

@@ -0,0 +1,6 @@
This module extends the functionality of company management. It allows
you to bind a technical user on the company in order to use it in batch
processes.
The technical user must - be inactive to avoid login - be in the
required groups depending of what you need to do

View File

@@ -0,0 +1,18 @@
If you install the module, you will find a tab on the company form
allowing to define the technical user.
In your code you can use the following helper that will return you
- a self with the user tech if configured
- or a self with sudo user
``` python
self_tech = self.sudo_tech()
```
If you want to raise an error if the tech user in not configured just
call it with
``` python
self_tech = self.sudo_tech(raise_if_missing)
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@@ -0,0 +1,456 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Base Technical User</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="base-technical-user">
<h1 class="title">Base Technical User</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:6b9aa9e6df3dd5d831874f6d9d9f252d4da28ffc66930408903c3befdbeffb8f
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Production/Stable" src="https://img.shields.io/badge/maturity-Production%2FStable-green.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-tools/tree/18.0/base_technical_user"><img alt="OCA/server-tools" src="https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-base_technical_user"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-tools&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends the functionality of company management. It allows
you to bind a technical user on the company in order to use it in batch
processes.</p>
<p>The technical user must - be inactive to avoid login - be in the
required groups depending of what you need to do</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-6">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
<p>If you install the module, you will find a tab on the company form
allowing to define the technical user.</p>
<p>In your code you can use the following helper that will return you</p>
<ul class="simple">
<li>a self with the user tech if configured</li>
<li>or a self with sudo user</li>
</ul>
<pre class="code python literal-block">
<span class="n">self_tech</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sudo_tech</span><span class="p">()</span>
</pre>
<p>If you want to raise an error if the tech user in not configured just
call it with</p>
<pre class="code python literal-block">
<span class="n">self_tech</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sudo_tech</span><span class="p">(</span><span class="n">raise_if_missing</span><span class="p">)</span>
</pre>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-tools/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-tools/issues/new?body=module:%20base_technical_user%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Cédric Pigeon &lt;<a class="reference external" href="mailto:cedric.pigeon&#64;acsone.eu">cedric.pigeon&#64;acsone.eu</a>&gt;</li>
<li>Khoi (Kien Kim) &lt;<a class="reference external" href="mailto:khoikk&#64;trobz.com">khoikk&#64;trobz.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-6">Other credits</a></h2>
<p>The migration of this module from 17.0 to 18.0 was financially supported
by:</p>
<ul class="simple">
<li>Camptocamp.</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-tools/tree/18.0/base_technical_user">OCA/server-tools</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1 @@
from . import test_sudo_tech

View File

@@ -0,0 +1,81 @@
# Copyright 2020 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import SUPERUSER_ID
from odoo.exceptions import UserError
from odoo.tests import TransactionCase
class SudoTechCase(TransactionCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.company = cls.env.ref("base.main_company")
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.company_2 = cls.env["res.company"].create(
{
"name": "Company 2 tech",
}
)
cls.company_3 = cls.env["res.company"].create(
{
"name": "Company 3 NO tech",
"user_tech_id": False,
}
)
cls.user_tech = (
cls.env["res.users"]
.with_context(no_reset_password=True)
.create({"login": "tech", "name": "tech"})
)
cls.user_tech_2 = (
cls.env["res.users"]
.with_context(no_reset_password=True)
.with_company(cls.company_2)
.create({"login": "tech2", "name": "tech2", "company_id": cls.company_2.id})
)
cls.env(user=cls.env.ref("base.user_demo").id)
def test_sudo_tech(self):
self.company.user_tech_id = self.user_tech
self_tech = self.env["res.partner"].sudo_tech()
self.assertEqual(self_tech._uid, self.user_tech.id)
def test_sudo_tech_missing_return_sudo(self):
self_tech = self.env["res.partner"].sudo_tech()
self.assertEqual(self_tech._uid, SUPERUSER_ID)
def test_sudo_tech_missing_raise(self):
with self.assertRaises(UserError):
self.env["res.partner"].sudo_tech(raise_if_missing=True)
def test_sudo_tech_company_2(self):
self.company_2.user_tech_id = self.user_tech_2
self_tech = self.env["res.partner"].with_company(self.company_2).sudo_tech()
self.assertEqual(self_tech._uid, self.user_tech_2.id)
def test_sudo_tech_company_2_record(self):
# We switch company twice to fill in allowed_company_ids
user = self.env.user.with_company(self.company_2).with_company(self.company)
self.assertEqual(
self.company,
user.env.company,
)
self.company_2.user_tech_id = self.user_tech_2
self_tech = user.with_company(self.company_2).sudo_tech()
self.assertEqual(self_tech._uid, self.user_tech_2.id)
def test_sudo_tech_company_3(self):
"""
Ensure the error message is related to the
active company when there is no technical user.
"""
user = self.env.user.with_company(self.company_3)
self.assertEqual(self.company_3, user.env.company)
self.assertNotEqual(user.env.company, user.company_id)
with self.assertRaises(UserError) as em:
user.sudo_tech(raise_if_missing=True)
self.assertIn(self.company_3.name, em.exception.args[0])
self.assertNotIn(user.company_id.name, em.exception.args[0])

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" ?>
<odoo>
<record id="res_company_view_form_inherit_base_technical_user" model="ir.ui.view">
<field name="name">res.company.form (base_technical_user)</field>
<field name="model">res.company</field>
<field name="inherit_id" ref="base.view_company_form" />
<field name="priority">20</field>
<field name="arch" type="xml">
<xpath expr="//notebook/page[1]" position="after">
<page name="configuration" string="Configuration">
<group>
<group
name="tech_param"
string="Technical Parameters"
groups="base.group_erp_manager"
>
<field name="user_tech_id" />
</group>
</group>
</page>
</xpath>
</field>
</record>
</odoo>